我目前正在尝试创建一个上下文菜单。我希望我的上下文菜单能够捕获产生菜单的View中的文本。这是我正在使用的代码:
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
AdapterView.AdapterContextMenuInfo info =
(AdapterView.AdapterContextMenuInfo) menuInfo;
selectedOption = ((TextView) info.targetView).getText().toString();
menu.setHeaderTitle(selectedOption);
}
执行应用时,我收到以下错误:
Caused by: java.lang.NullPointerException: Attempt to read from field 'android.view.View android.widget.AdapterView$AdapterContextMenuInfo.targetView' on a null object reference
at com.conversions.rolando.conversions.MainActivity.onCreateContextMenu(MainActivity.java:172)
...指向:selectedOption = ((TextView) info.targetView).getText().toString();
因此错误基本上意味着“info”为空,因为“menuInfo”也为空?我试图通过阅读What is a NullPointerException, and how do I fix it?来理解为什么,但似乎无法找到解决方案,或者理解问题。
这就是我打电话registerForContextMenu()
的方式:
public void onButtonClickEvent(View sender)
{
registerForContextMenu(sender);
openContextMenu(sender);
unregisterForContextMenu(sender);
}
我的main.xml
中的TextView正在调用此方法谢谢!
答案 0 :(得分:0)
您似乎理解了这个问题:info
是null
,因为menuInfo
是null
。而你正试图取消引用info
。也就是说,访问null
对象上的字段。由于该对象不存在(即。null
),因此该字段不能存在且不得使用。 Java运行时已检测到此null
的取消引用,并抛出相关的异常,NullPointerException
。
要避免此错误,您应该在尝试访问其字段之前检查info
是否为null
,例如:
if (info != null) {
selectedOption = ((TextView) info.targetView).getText().toString();
menu.setHeaderTitle(selectedOption);
}
答案 1 :(得分:0)
论证menuInfo
总是被android传递为null,而这可能是因为你应该调用某个registerForContextMenu()
方法解释here