我当前的结构涉及一个navDrawer,其中包含一个项目列表,指向包含包含CardView的RecyclerView的主片段。当我设置ListView以将其传递给registerForContextMenu时,应用程序崩溃,给出了初始化具有空值的对象的错误。
我用来声明ListView项目传递的代码是。
ListView LV = (ListView) findViewById(R.id.cv);
其中" cv"是保存要显示的数据的CardView元素的id。
registerForContextMenu(LV);
此时特定错误即将来临:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setOnCreateContextMenuListener(android.view.View$OnCreateContextMenuListener)' on a null object reference
LV的值将变为null。 我是android新手,我在声明中错过了什么,或者我使用强制转换为ListView?可以在CardView中长时间点击吗?
答案 0 :(得分:0)
您在listview中引用了错误的ID。当您初始化列表视图时,您需要使用其ID来获取fins。它与其他所有视图相同。
在这种情况下,您将卡片视图ID传递给listview对象,该文件不正确.cv应该是列表视图的ID,而不是卡片视图。
应该是
ListView LV = (ListView) findViewById(R.id.ypur_list_view_id_in_xml);
答案 1 :(得分:0)
我找到了一个可能解决这个问题的方法。 在RecyclerViewAdapter中,您要为要在显示器上显示的组件创建结构,请创建一个类
public static class CompareViewHolder extends RecyclerView.ViewHolder implements RecyclerView.OnCreateContextMenuListener {
CardView cv;
TextView itemid;
TextView baseline;
TextView current;
CompareViewHolder(View itemView) {
super(itemView);
cv = (CardView) itemView.findViewById(R.id.cv);
itemid = (TextView) itemView.findViewById(R.id.itemid);
baseline = (TextView) itemView.findViewById(R.id.baseline);
current = (TextView) itemView.findViewById(R.id.current);
itemView.setOnCreateContextMenuListener(this);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
}
}
在您的主要活动中(出现RecyclerView的地方)
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo){
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.my_context_menu, menu);
}
然后到菜单项的选择事项覆盖另一个方法
@Override
public boolean onContextItemSelected(MenuItem item) {
//Action to be done
}
my_context_menu.xml包含将出现在上下文菜单中的选项。
如果这对您没有帮助,请参阅此How to create context menu for RecyclerView以获取更多信息。
我强行将RecyclerView转换为ListView,然后将其注册到上下文菜单(这不是必需的),该对象因为视图尚未创建而变为null,同样的事情要做无需从您正在制作的RecyclerViewAdapter中插入ListView。