首页 > 解决方案 > 当 menu_item 被传递一个视图时 registerForContextMenu 抛出空指针异常

问题描述

当我单击一个菜单项时,我想生成一个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);

            }

标签: androidcontextmenu

解决方案


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

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

这个链接是一个例子

将 imageview 放在 onCreateOptonsMenu() 方法中,并为 findViewById 使用菜单参数:

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


推荐阅读