2017-11-11 149 views
-1

我有一個按鈕,我想在點擊它後更改文本。(Android Butterknife)如何在點擊後更改按鈕上的文本

@BindView(R.id.btn) Button btn; 

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

} 
@OnClick(R.id.btn) 
public void click() 
{ 
    btn.setText("anything"); 
} 

我已經意識到我可以用正常的onclickListener做到這一點,但我想知道如果我能做到這一點使用butterknife。

EDIT

搖籃

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 25 
    buildToolsVersion "25.0.0" 
    defaultConfig { 
     applicationId "com.jnx.test" 
     minSdkVersion 14 
     targetSdkVersion 25 
     versionCode 1 
     versionName "1.0" 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 
     exclude group: 'com.android.support', module: 'support-annotations' 
    }) 
    compile 'com.android.support:appcompat-v7:25.3.0' 
    compile 'com.android.support.constraint:constraint-layout:1.0.2' 
    testCompile 'junit:junit:4.12' 


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

EDIT

錯誤日誌

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.jnx.test/com.jnx.test.MainActivity}: java.lang.IllegalStateException: Required view 'btn' with ID 2131427422 for field 'btn' and method 'click' was not found. If this view is optional add '@Nullable' (fields) or '@Optional' (methods) annotation. 
                    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 
                    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                    at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                    at android.os.Handler.dispatchMessage(Handler.java:102) 
                    at android.os.Looper.loop(Looper.java:148) 
                    at android.app.ActivityThread.main(ActivityThread.java:5417) 
                    at java.lang.reflect.Method.invoke(Native Method) 
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
                   Caused by: java.lang.IllegalStateException: Required view 'btn' with ID 2131427422 for field 'btn' and method 'click' was not found. If this view is optional add '@Nullable' (fields) or '@Optional' (methods) annotation. 
                    at butterknife.internal.Utils.findRequiredView(Utils.java:92) 
                    at com.jnx.test.MainActivity_ViewBinding.<init>(MainActivity_ViewBinding.java:29) 
                    at java.lang.reflect.Constructor.newInstance(Native Method) 
                    at butterknife.ButterKnife.createBinding(ButterKnife.java:199) 
                    at butterknife.ButterKnife.bind(ButterKnife.java:124) 
                    at com.jnx.test.MainActivity.onCreate(MainActivity.java:22) 

線22在MainActivity是的setContentView(R.layout.activity_main);

+0

我想你已經這樣做了。 –

+0

嗯,但它不起作用。它崩潰。 – jxn

+1

@jxn所以發佈崩潰日誌和你的gradle – FarshidABZ

回答

0

您可以通過視圖:

@OnClick(R.id.btn) 
public void click(Button button) { 
    button.setText("Hello"); 
} 

而且你不需要此行,刪除此:

@BindView(R.id.btn) Button btn; 
+0

它不起作用。 :( – jxn

+1

@jxn你確定你的佈局中有一個Button(activity_main.xml)''id爲'btn'? –

+0

對不起,我重新啓動了android studio並且它有幫助,所以我猜這是不可能的'@ OnClick'和'@ BindView',對嗎? – jxn

0

好吧,我知道了。我認爲之前有人發佈過這樣的答案,但起初它對我沒有任何作用。它在android studio重新啓動後開始工作。

@BindView(R.id.btn) Button btn; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ButterKnife.bind(this); 

} 
@OnClick(R.id.btn) 
public void click(View v) 
{ 
    btn.setText("dsdssd"); 
} 

您必須將視圖作爲參數傳遞。

+0

'你必須傳遞視圖作爲參數。「 - 不,它是可選的。 –

相關問題