2015-01-03 12 views
5

@OnClick không hoạt động trong việc thực hiện ButterKnife Thư viện@OnClick không hoạt động trong việc thực hiện ButterKnife Thư viện

Khi tôi bấm vào Button, không có gì đang xảy ra.

Đây là mã đầy đủ của tôi:

public class MainActivity extends ActionBarActivity { 
    @InjectView(R.id.edit_user) 
    EditText username; 
    @InjectView(R.id.edit_pass) 
    EditText password; 

    @OnClick(R.id.btn) 
    void submit() { 
     // TODO call server... 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     ButterKnife.inject(this); 
     // TODO Use "injected" views... 
    } 
} 

Đây là xml của tôi:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

<EditText 
    android:id="@+id/edit_user" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:hint="user" /> 

<EditText 
    android:id="@+id/edit_pass" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:hint="user" /> 

<Button 
    android:id="@+id/btn" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Button" /> 

Cảm ơn

+4

bạn đã gọi 'ButterKnife.inject (điều này, xem); 'hoặc' ButterKnife.inject (this); '? –

+1

ButterKnife.inject (điều này); – Illusion

+0

@shayanpourvatan phải thay đổi ButterKnife.inject (điều này) thành ButterKnife.inject (cái này, xem) ?? – Illusion

Trả lời

10

Như đã đề cập trong các tài liệu Butterknife, Nếu bạn đang sử dụng Eclipse, bạn sẽ cần phải configure IDE trước khi các chú thích sẽ được xử lý

3

Trong hoạt động của bạn cố gắng thêm ..

ButterKnife.inject(this); 

kiểm tra mã này

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 
ButterKnife.inject(this); 
} 

@OnClick(R.id.buttonAlert) 
public void alertClicked(View v){ 
new AlertDialog.Builder(v.getContext()) 
    .setMessage(getFormattedMessge()) 
    .setNeutralButton("OK", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
     dialog.dismiss(); 
     } 
    }) 
    .show(); 
} 
+13

.Inject đã được thay đổi .trong thư viện mới nhất – deepwinter

0

Sử dụng Bơ Knife bạn có thể kết bạn xem như thế này cũng ...

class ExampleActivity extends Activity { 

    @Bind(R.id.title) 
    TextView title; 
    @Bind(R.id.subtitle) 
    TextView subtitle; 
    @Bind(R.id.footer) 
    TextView footer; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.simple_activity); 
     ButterKnife.bind(this); 
     // TODO Use fields... 
    } 
} 

để biết thêm chi tiết bạn có thể thấy liên kết này http://jakewharton.github.io/butterknife/

11

Đối với bất kỳ ai gặp sự cố này trong Android Studio, hãy đảm bảo bạn đang bao gồm cả các phụ thuộc cần thiết và plugin apt trong các tệp xây dựng tương ứng của bạn (hãy kiểm tra chỉ đọc Butterknife). Tôi vội vã thông qua các tài liệu và chỉ bao gồm sự phụ thuộc biên dịch, mà gây ra ràng buộc để thất bại âm thầm.

+0

bạn có thể xem liên kết này để biết thêm chi tiết: https: //www.sitepoint.com/tidying-code-with-android-butterknife/ – Arthur

3

Kiểm tra kỹ tất cả các phụ thuộc trong dự án của bạn. Đây là hướng dẫn tải xuống từ tệp readme. Cấu hình build.gradle dự án cấp của bạn để bao gồm các 'android-apt' plugin:

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' 
    } 
} 

Sau đó, áp dụng các plugin 'android-apt' trong build.gradle mô-đun cấp của bạn và thêm các phụ thuộc Bơ Knife :

apply plugin: 'android-apt' 

android { 
    ... 
} 

dependencies { 
    compile 'com.jakewharton:butterknife:8.2.1' 
    apt 'com.jakewharton:butterknife-compiler:8.2.1' 
} 

Lưu ý: Nếu bạn đang sử dụng trình biên dịch Jack mới với phiên bản 2.2.0 hoặc mới hơn, bạn không cần plugin 'android-apt' và thay vào đó có thể thay thế apt với annotationProcessor khi tuyên bố sự phụ thuộc biên dịch.

2

Sử dụng ButterKnife.bind(this); trong onCreate() của một Hoạt động. hoặc onCreateView cho Phân đoạn.

@OnClick(R.id.button_stop_sticky) 
    public void onStopClicked(View v) { 

     Toast.makeText(this, "onStop Clicked", Toast.LENGTH_LONG).show(); 

    } 

Và rõ ràng, ứng dụng mô-đun> gradle thêm phụ thuộc

compile 'com.jakewharton:butterknife:8.8.1' 
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' 
Các vấn đề liên quan