2017-11-11 2 views
-1

Ich habe einen Knopf und ich will Text darauf ändern, nachdem er angeklickt wurde.(Android Butterknife) wie man Text auf Knopfdruck nach dem Klicken ändert

@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"); 
} 

Ich habe gemerkt, dass ich dies mit normalen OnClickListener tun kann, aber ich frage mich, wenn ich dieses mit Buttermesser tun können.

EDIT

Gradle

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

Fehlerprotokoll

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) 

Linie 22 in MainActivity ist setContentView (R.layout.activity_main);

+0

Ich denke, Sie haben das bereits getan. –

+0

Nun, aber es funktioniert nicht. Es stürzt ab. – jxn

+1

@jxn Also poste das Crashlog und dein grandle – FarshidABZ

Antwort

0

können Sie die Ansicht übergeben:

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

Und Sie diese Zeile nicht brauchen so entfernen:

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

Es funktioniert nicht. :( – jxn

+1

@jxn Sind Sie sicher, dass Sie einen Button in Ihrem Layout '(activity_main.xml)' mit id 'btn' haben? –

+0

Entschuldigung. Ich habe Android Studio neu gestartet und es half. Also ich denke, es ist unmöglich zu verwenden Sowohl @ OnClick als auch @ BindView. Bin ich richtig? – jxn

0

Ok, ich habe es. Ich denke, jemand hat diese Antwort schon einmal gepostet, aber zuerst hat es nicht funktioniert. Es begann nach dem Neustart von Android Studio zu arbeiten.

@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"); 
} 

Sie müssen die Ansicht als Argument übergeben.

+0

'Sie müssen übergeben Sie die Ansicht als Argument. - Nein, es ist optional. –

Verwandte Themen