Android:ListView对象初始化创建上下文菜单时出错

时间:2015-07-24 13:38:02

标签: android listview android-listview contextmenu

我当前的结构涉及一个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中长时间点击吗?

2 个答案:

答案 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。