Tuesday, June 7, 2016

[Android][Resolved] Caused by: java.lang.NoSuchMethodException: clickMenuItem [interface android.view.MenuItem]

Error message:
06-07 23:14:00.181 2206-2206/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: net.macdidi.listviewadapter, PID: 2206
android.view.InflateException: Couldn't resolve menu item onClick handler clickMenuItem in class net.macdidi.listviewadapter.MainActivity
at android.support.v7.view.SupportMenuInflater$InflatedOnMenuItemClickListener.<init>(SupportMenuInflater.java:242)
at android.support.v7.view.SupportMenuInflater$MenuState.setItem(SupportMenuInflater.java:443)
at android.support.v7.view.SupportMenuInflater$MenuState.addItem(SupportMenuInflater.java:479)
at android.support.v7.view.SupportMenuInflater.parseMenu(SupportMenuInflater.java:196)
at android.support.v7.view.SupportMenuInflater.inflate(SupportMenuInflater.java:118)
at net.macdidi.listviewadapter.MainActivity.onCreateOptionsMenu(MainActivity.java:104)
at android.app.Activity.onCreatePanelMenu(Activity.java:2538)
at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:340)
at android.support.v7.view.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:85)
at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.onCreatePanelMenu(AppCompatDelegateImplBase.java:258)
at android.support.v7.app.AppCompatDelegateImplV7.preparePanel(AppCompatDelegateImplV7.java:1320)
at android.support.v7.app.AppCompatDelegateImplV7.doInvalidatePanelMenu(AppCompatDelegateImplV7.java:1600)
at android.support.v7.app.AppCompatDelegateImplV7.access$100(AppCompatDelegateImplV7.java:92)
at android.support.v7.app.AppCompatDelegateImplV7$1.run(AppCompatDelegateImplV7.java:131)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
                                                  Caused by: java.lang.NoSuchMethodException: clickMenuItem [interface android.view.MenuItem]
at java.lang.Class.getConstructorOrMethod(Class.java:472)
at java.lang.Class.getMethod(Class.java:857)
at android.support.v7.view.SupportMenuInflater$InflatedOnMenuItemClickListener.<init>(SupportMenuInflater.java:240)
at android.support.v7.view.SupportMenuInflater$MenuState.setItem(SupportMenuInflater.java:443)
at android.support.v7.view.SupportMenuInflater$MenuState.addItem(SupportMenuInflater.java:479)
at android.support.v7.view.SupportMenuInflater.parseMenu(SupportMenuInflater.java:196)
at android.support.v7.view.SupportMenuInflater.inflate(SupportMenuInflater.java:118)
at net.macdidi.listviewadapter.MainActivity.onCreateOptionsMenu(MainActivity.java:104)
at android.app.Activity.onCreatePanelMenu(Activity.java:2538)
at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:340)
at android.support.v7.view.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:85)
at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.onCreatePanelMenu(AppCompatDelegateImplBase.java:258)
at android.support.v7.app.AppCompatDelegateImplV7.preparePanel(AppCompatDelegateImplV7.java:1320)
at android.support.v7.app.AppCompatDelegateImplV7.doInvalidatePanelMenu(AppCompatDelegateImplV7.java:1600)
at android.support.v7.app.AppCompatDelegateImplV7.access$100(AppCompatDelegateImplV7.java:92)
at android.support.v7.app.AppCompatDelegateImplV7$1.run(AppCompatDelegateImplV7.java:131)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
What i want is make a action bar with menu, when user click the button on right hand-side of action, a menu with text "search" will be shown, and if user search the text "SEARCH" would got a Toast message.


xml of menu:
<?xml version="1.0" encoding="utf-8"?><
menu xmlns:android="http://schemas.android.com/apk/res/android">


    <item
        android:id="@+id/search_item"
        android:icon="@android:drawable/ic_menu_search"
        android:title="SERACH"
        android:onClick="clickMenuItem" />
</menu>

code in MainActivity.java
public void clickMenuItem(View view){
Toast.makeText(MainActivity.this, 
"Action bar icon was clicked.",

Toast.LENGTH_SHORT).show();
}
Run the project would got the error "Caused by: java.lang.NoSuchMethodException: clickMenuItem [interface android.view.MenuItem]". And finally found it's caused by the incorrect parameter, i should use "MenuItem" intend of View as the dataType.

public void clickMenuItem(MenuItem menu){
    Toast.makeText(MainActivity.this, "Action bar icon was clicked.",Toast.LENGTH_SHORT).show();
}
Updates at 14/06/2016:
If you still got the problem after you are sure function you call used MenuItem as parameter type. Then pleases check are the method you set at the xml file existed. For example:

menu_main.xml
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    tools:contect=".MainActivity"    >
    <item        android:id="@+id/delete_item"        android:icon="@android:drawable/ic_menu_delete"        android:title="DELETE"        app:showAsAction="always"        android:onClick="clickMenuItem"/>

    <item        android:id="@+id/setting_item"        android:icon="@android:drawable/ic_menu_preferences"        android:title="Setting"        app:showAsAction="always"        android:onClick="clickPreferences"/>

</menu>
And MainActivity.java
public class MainActivity extends AppCompatActivity {

    private ListView listView;
    private ItemAdapter itemAdapter;
    private TextView show_app_name;
    private MenuItem add_item, search_item, revert_item, delete_item;
    private int selectedCount = 0;

    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    public void clickPreferences(MenuItem menu) {
        Toast.makeText(MainActivity.this, "Preferences clicked",Toast.LENGTH_SHORT).show();
    }
}

In this example shown above, if you defined the method "clickPreferences"only but no "clickMenuItem" method (which called by the menu item : delete_item ), you would still got " java.lang.NoSuchMethodException" and may also got "android.view.InflateException". To solve that, let add the method missed:

public class MainActivity extends AppCompatActivity {
    //Simple Adapter    /*private ArrayAdapter<String> adapter;    private ListView listView;*/
    private ListView listView;
    private ItemAdapter itemAdapter;
    private TextView show_app_name;
    private MenuItem add_item, search_item, revert_item, delete_item;
    private int selectedCount = 0;

    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    public void clickPreferences(MenuItem menu) {
        Toast.makeText(MainActivity.this, "Preferences clicked",Toast.LENGTH_SHORT).show();
    }

    public void clickMenuItem(MenuItem menu) {
        Toast.makeText(MainActivity.this, "Menu Item clicked",Toast.LENGTH_SHORT).show();
    }

}
 And then clean or rebuild the project and run it again.


Reference:

http://stackoverflow.com/questions/11245829/inflateexception-couldnt-resolve-menu-item-onclick-handler

No comments :

Post a Comment