2015-01-03 30 views
5

@OnClick工作沒有實施ButterKnife圖書館@OnClick不執行ButterKnife圖書館

當我點擊Button工作,什麼也沒有發生。

這是我的全碼:

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... 
    } 
} 

這是我的xml:

<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" /> 

感謝

+4

你叫'ButterKnife.inject(這一點,視圖);'或'ButterKnife.inject(本);'? –

+1

ButterKnife.inject(this); – Illusion

+0

@shayanpourvatan必須將ButterKnife.inject(this)改爲ButterKnife.inject(this,view)?? – Illusion

回答

10

正如Butterknife文檔中提到,如果你使用的是Eclipse,你需要configure IDE中的標註將被處理

3

在您的活動嘗試添加..

ButterKnife.inject(this); 

檢查這個代碼

@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已更改.bind在最新的庫 – deepwinter

0

之前使用黃油刀,你可以綁定你查看這樣也...

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... 
    } 
} 

有關詳細信息,你可以看到這個鏈接http://jakewharton.github.io/butterknife/

11

對於在Android Studio中遇到此問題的任何人,請確保您在各自的構建文件中包含必需的依賴項和apt插件(檢查Butterknife自述文件)。我衝過了文檔,只包含了編譯依賴項,導致綁定失敗。

+0

您可以查看此鏈接瞭解更多詳情:https: //www.sitepoint.com/tidying-code-with-android-butterknife/ – Arthur

3

仔細檢查項目中的所有依賴關係。這是來自自述文件的下載說明。 配置您的項目級的build.gradle包括了「Android的易」插件:

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

然後,應用了「Android的容易」插件,在模塊級的build.gradle並添加黃油刀依賴:

apply plugin: 'android-apt' 

android { 
    ... 
} 

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

注:如果您使用的是新傑克編譯器2.2.0或更高版本,你不需要對「Android-容易」插件,並宣佈該編譯器的依賴時可以使用,而不是取代annotationProcessor容易的版本。

2

在Activity的onCreate()中使用ButterKnife.bind(this);。或onCreateView for Fragment。

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

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

    } 

而且很明顯,應用模塊>添加的Gradle依賴

compile 'com.jakewharton:butterknife:8.8.1' 
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'