Voglio definire un Listener onClick per un EditText nel Layout-XML dell'attività di may, ma fallisce sempre con un'eccezione oscura.Android EditText onClick Listener definito in Layout non riesce con oscura Eccezione
Il layout viene iniettato con setContentView()
nel onCreate
-Metodo della mia attività. Sono non utilizzando un frammento qui e sono ben consapevole del fatto che il listener XML definito onClick
non funziona per i frammenti.
Per scopi di test, ho aggiunto lo stesso metodo di gestione a un ImageView che si trova accanto a EditText. Lì il gestore funziona, su EditText fallisce. Quindi questo è qualcosa di speciale nell'EditText e non in un Problema generale di un metodo di gestione errato.
Questa è la parte rilevante del mio file di layout:
<ImageView
android:layout_gravity="center_horizontal|top"
android:layout_rowSpan="3"
android:src="@drawable/ic_action_event"
android:onClick="onCreationClicked"
/>
<EditText
android:id="@+id/creation_edit"
android:focusable="false"
android:clickable="true"
android:layout_gravity="fill_horizontal"
android:hint="@string/enter_creation"
android:onClick="onCreationClicked"
style="@style/PickerEditText"
/>
Quando clicco sul ImageView viene eseguito il metodo associato e un DialogFragment viene avviato. Quando clicco sul EditText ottengo la seguente eccezione:
java.lang.IllegalStateException: Could not find a method onCreationClicked(View) in the activity class android.support.v7.internal.widget.TintContextWrapper for onClick handler on view class android.support.v7.widget.AppCompatEditText with id 'creation_edit'
at android.view.View$1.onClick(View.java:3994)
at android.view.View.performClick(View.java:4756)
at android.view.View$PerformClick.run(View.java:19749)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: java.lang.NoSuchMethodException: onCreationClicked [class android.view.View]
at java.lang.Class.getMethod(Class.java:664)
at java.lang.Class.getMethod(Class.java:643)
at android.view.View$1.onClick(View.java:3987)
at android.view.View.performClick(View.java:4756)
at android.view.View$PerformClick.run(View.java:19749)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Attualmente sto testando su un Samsung S4 (Android 5.0.1) API 21 e AppCompat Biblioteca nella versione v7 22.1.0
Aggiunta del Il listener sarebbe una soluzione, ma volevo evitare questo, dal momento che risulta in un singolo metodo onClick
con una grande istruzione switch e l'onClick-Handler basato su XML produce un codice più leggibile ed esplicito che io preferire.
Forse ulteriore ricerca:
ora posso riprodurre il comportamento di errore e il comportamento corretto (vedi sotto). Sembra che questo sia un bug (o una funzionalità) introdotto con appcompat-v7 22.1.0 & 22.1.1.
Ho creato un nuovo progetto con Android Studio con Blank Activity. minSdk 17, targetSdk 21. Aggiunta la EditText
al vuoto Activity
come illustrato di seguito e ha aggiunto il metodo del gestore al Activity
in questo modo:
public void onCreationClicked(View view) {
Toast.makeText(this,"Event Handled",Toast.LENGTH_LONG).show();
}
Iniziato l'App ha toccato l'EditText -> Crash
cambiato la mia build.gradle da:
compile 'com.android.support:appcompat-v7:22.1.1'
a
compile 'com.android.support:appcompat-v7:22.0.0'
e viene mostrato lo Toast
.
Qualche idea?
I Need l'ascoltatore onClick sul EditText. Rimozione non è una soluzione. – Wildsau