registerForContextMenu在将menu_item传递给视图时引发空指针异常

问题描述 投票:0回答:1

[单击菜单项时,我想生成一个context menu,其中包含供用户选择的选项。但其抛出null pointer exception

#menu_main.xml#

<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:context="com.bremachitra.mynotepad.MainActivity">
 <item
        android:id="@+id/action_view"
        android:title="View"
        app:actionViewClass="android.widget.ImageButton" />
</menu>

MainActivity.java

    if(id == R.id.action_view)
     { 
        ImageButton viewButton = (ImageButton) findViewById(R.id.action_view);
         registerForContextMenu(viewButton);
            }

     @Override
        public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
            super.onCreateContextMenu(menu, v, menuInfo);
            Toast.makeText(this,"context",Toast.LENGTH_SHORT).show();
            getMenuInflater().inflate(R.menu.menu_view,menu);
        }



      @Override
        public boolean onContextItemSelected(MenuItem item) {

            switch(item.getItemId())
            {
                case R.id.action_grid:
                Toast.makeText(this,"grid view",Toast.LENGTH_SHORT).show();
                return true;
                case R.id.action_list:
                Toast.makeText(this,"List view",Toast.LENGTH_SHORT).show();
                    return true;

                default:
                    return super.onContextItemSelected(item);

            }
android contextmenu
1个回答
0
投票

您的错误适用于imageview。您不能直接访问菜单源。您应该使用Inflater(或menuInflater)或Menu对象:

viewButton =(ImageButton)menu.findViewById(R.id.action_view);

This link is an example

将imageview放在onCreateOptonsMenu()方法中:

viewButton =(ImageButton)menu.findViewById(R.id.action_view);

© www.soinside.com 2019 - 2024. All rights reserved.