2014-12-17 1 views
8

ho impostato android:onclick in xml per un imageButton e ho inserito tale metodo nella mia attività. in Android s sotto 5 funziona bene ma in Android 5 mi dà errore.android 5 e onClick in layout xml

mio codice ImageButton:

<ImageButton 
    android:id="@+id/photo_detail" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/detail_icon" 
    android:layout_alignParentLeft="true" 
    android:layout_centerVertical="true" 
    android:background="@drawable/image_background" 
    android:onClick="photoDetailButtonMethod"/> 

il mio codice di metodo:

public void photoDetailButtonMethod(View theButton) 
{ 
    //something 
} 

l'errore:

java.lang.IllegalStateException: Could not find a method photoDetailButtonMethod(View) in the activity class android.view.ContextThemeWrapper for onClick handler on view class android.widget.ImageButton with id 'photo_detail' 
      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: photoDetailButtonMethod [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) 

, cercando l'errore posso vederlo cercare il mio metodo in android.view.ContextThemeWrapper classe così finisce con NoSuchMethodException.

Non riesco a capire come risolvere questo, qualsiasi aiuto?

1) ho già aggiunto tools:context=".PhotoViewerActivity" nella radice del mio layout.

2) l'attività si estende ActionBarActivity con il tema appCompat.

risposta

2

non riesco a trovare qual è il vero problema, forse qualche incompatibilità tra eclipse e api 21 o qualcos'altro.

per ora ho appena impostato uno onClickListener per quel pulsante.

2

finalmente ho trovato il problema.

tutto ciò di cui ho bisogno è associare il layout xml a un'attività. per questo nella scheda di progettazione del layout xml assicurati di aver selezionato l'attività giusta.

enter image description here

+0

Questo non ha funzionato per me. Grazie comunque: aveva senso aggiungere un contesto al file di layout. – Mullazman

0

essere sicuri che il metodo onClick

public void photoDetailButtonMethod(View theButton) 
{ 
    //something 
} 

è scritto al di fuori onCreate() metodo e nella classe di attività.

17

Ho avuto un problema molto simile, si verifica solo su Android Lollipop, mentre funziona bene sulle versioni precedenti. Sembra un bug o una funzionalità non documentata in 5.0.

Assicurarsi che nel file di layout in cui il vostro ImageButton risiede non c'è nonandroid:theme insieme, vale a dire nulla di tutto questo:

android:theme="@style/Base.Theme.AppCompat.Light" 

Invece, definire il tema dell'applicazione nell'elemento AndroidManifest.xml applicazione:

<application 
     ... 
     android:theme="@android:style/Theme.Holo.Light" 
     ... > 
1

Accade quando si dichiara il metodo public void onClick(View view) all'interno del frammento anziché l'attività

-1

suo solo Google Play problema servizi e nulla a che fare con il vostro codice o le impostazioni bla bla ...

Basta aggiornare il Google Play Services di telefono e di aggiungere le dipendenze nella build.File Gradle come:

di compilazione 'com.google.android.gms: Servizi di play-: 7.5.0'

0

stavo facendo questo con un "menuItem", e aveva questo:

public void photoDetailButtonMethod(View theButton) 
{ 
    //something 
} 

Quale è errato per menuItem. Quindi devi avere questo:

public void photoDetailButtonMethod(MenuItem theButton) 
{ 
    //something 
} 

Stava lanciando lo stesso errore menzionato dall'OP.

Spero che questo aiuti qualcuno ...