Home » Android » android 5 and onClick in xml layout

android 5 and onClick in xml layout

Posted by: admin June 15, 2020 Leave a comment

Questions:

I have set android:onclick in xml for an imageButton and put that method in my activity. In android s below 5 it works fine but in android 5 it gives me Error.

My imageButton code:

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

My method code:

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

The error:

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)

By looking the error I can see it searching for my method in android.view.ContextThemeWrapper class so it endup with NoSuchMethodException.

I can’t figure out how to solve this, any help?

1) I already added tools:context=".PhotoViewerActivity" in the root of my layout.

2) The activiy extends ActionBarActivity with appCompat theme.

How to&Answers:

I had a very similar problem, it happens only on Android Lollipop, whilst it works fine on the older versions. Looks like a bug or undocumented feature in 5.0.

Make sure that in the layout file where your ImageButton resides there is no android:theme set, i.e. nothing like this:

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

Instead, define your application theme in AndroidManifest.xml application element:

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

Answer:

i can’t find what is the real problem, maybe some incompatiblity between eclipse and api 21 or something else.

for now i just set an onClickListener for that button.

Answer:

finally i found the problem.

all i need is to associate the xml layout to an activity. for this in the design tab of xml layout make sure you selected the right activity.

enter image description here

Answer:

It happens when you have declared the public void onClick(View view) method inside the fragment instead of activity

Answer:

Be sure that your onClick method

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

is written outside onCreate() method and in your Activity class.

Answer:

I was doing this with a “menuItem”, and had this:

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

Which is wrong for menuItems. Then you must have this:

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

It was throwing the same error as mentioned by the OP.

Hope this helps someone…

Answer:

Its just google play services issue and nothing to do with your coding or settings blah blah…

just update your google play services of phone and add dependencies in build.gradle file like:

compile ‘com.google.android.gms:play-services:7.5.0’