android - 当 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);
}
解决方案
您的错误是针对 imageview 的。您不能直接访问菜单源。您应该使用 inflater(或 menuInflater)或 Menu 对象:
viewButton = (ImageButton) menu.findViewById(R.id.action_view);
将 imageview 放在 onCreateOptonsMenu() 方法中,并为 findViewById 使用菜单参数:
viewButton = (ImageButton) menu.findViewById(R.id.action_view);
推荐阅读
- unit-testing - 将 TestCaseFilter 与 VSTest 和本机单元测试一起使用
- c# - 将数据添加到现有模型,并将真实数据添加到 MVC
- excel - 获取当前日期并以整数形式返回?
- flow-project - 在 Flow 环境中从快照加载模型
- python - 从 trainfset 或测试集计算残差值
- docker - Gitlab CI - 为什么作业的`image`设置会影响全局`before_script`和`image`?
- android - 如何正确使用 Retrofit 从 Android 设备上传文件到 Laravel 服务器
- azure - Azure 管理组对订阅的权限
- ruby-on-rails - Rails 中的安全查询参数
- html - 导航栏项目在悬停时变大?