[单击菜单项时,我想生成一个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>
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);
}
您的错误适用于imageview。您不能直接访问菜单源。您应该使用Inflater(或menuInflater)或Menu对象:
viewButton =(ImageButton)menu.findViewById(R.id.action_view);
将imageview放在onCreateOptonsMenu()方法中:
viewButton =(ImageButton)menu.findViewById(R.id.action_view);