当前位置: 首页 > 知识库问答 >
问题:

如何在CustomAdapter中对回收器视图实现LongPress?

舒博雅
2023-03-14
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.MenuInflater android.support.v4.app.FragmentActivity.getMenuInflater()' on a null object reference 
at onCreateActionMode
public ModalMultiSelectorCallback mDeleteMode = new ModalMultiSelectorCallback(mMultiSelector) {

        @Override
        public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
            super.onCreateActionMode(actionMode, menu);
            getActivity().getMenuInflater().inflate(R.menu.list_item_delete, menu);
            return true;
        }
context = getActivity();
customAdapter = new MyCustomAdapter(context, myArrayList);
public MyCustomAdapter(Context context, ArrayList<myArrayList> myArrayList) {
        mContext = context;
        this.myArrayList= myArrayList;
    }
@Override
        public boolean onLongClick(View v) {

            ((AppCompatActivity) mContext).startSupportActionMode(myFragment.mDeleteMode);
            myFragment.mMultiSelector.setSelected(this, true);
            return true;
        }

这将在上面的NullPointerException中结束。你知道为什么吗?

共有1个答案

凌善
2023-03-14

我猜您正在使用Big Nerd Ranch的RecycerView-MultiSelect库,并将此示例代码作为项目的基础。在此示例项目中,ModalMultiSelectorCallback对象在全局范围内被实例化。

考虑到您试图调用getactivity(),在调用片段的oncreate()方法之前,null可以是null。我将遵循以下步骤来解决此问题。

首先,使用actionmode.getmenuflater()而不是getactivity(),因为actionmode将提供上下文。接下来,创建一个用实现扩展ModalMultiSelectorCallback的类:

public class CustomMultiSelectorCallback extends ModalMultiSelectorCallback {

    public CustomMultiSelectorCallback(MultiSelector multiSelector) {
        super(multiSelector);
    }

    @Override
    public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
        super.onCreateActionMode(actionMode, menu);
        actionMode.getMenuInflater().inflate(R.menu.crime_list_item_context, menu);
        return true;
    }

    @Override
    public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
        ...
    }
}
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mMultiSelector = new MultiSelector();
    mDeleteMode = new CustomMultiSelectorCallback(mMultiSelector);
}

 类似资料:
  • 问题内容: 我想在textview之前添加图片,并希望在每一行中自定义TextView,但是我很难实现它,因为已经内置了xml这样的布局文件 simple_list_item_1 。请帮助我如何实施它。 这是simple_list_item编码 主要活动 这里是 twit_list.xml 附带 MainActivity.java 问题答案: 创建一个内部布局文件夹 创建一个这样的自定义适配器 从

  • 这是我的适配器 我想每次滚动一个项目。比如你在Instagram上看到多张照片。我怎么能那样做? 谢谢 和我的XML;

  • 请帮助如何使其工作

  • 我已经在我的回收器视图中实现了Admob原生快递广告。它在列表中保留空白,直到广告被加载,如果没有互联网可用。我怎样才能隐藏空白处直到广告加载?谢谢

  • 我刚开始在firebase工作。我设法上传了文本和图像,但是,我无法检索要显示在回收器视图中的图像,只能检索文本。我用的是毕加索依赖。我已经包括了我的主要活动。java类,该类负责显示从问题“我的适配器”中的firebase检索的回收器视图项。java类和模型类。我相信,在我将图像URI上载到firebase存储时,我可能犯了没有存储图像URI的错误,因此适配器无法检索图像位置。我想这可能是因为我

  • 我主要想做的是使在回收器视图中显示的对象可以点击某个TextView id,因为我正在制作一个程序,在列表中显示相册封面及其旁边的标题。我需要能够点击回收器视图的每一个框,并有一个TextView弹出与其他信息(作者,出版日期,热门歌曲等)时,它的点击,然后一个返回按钮(如果可能)回到专辑列表。我已经花了几个小时的时间来研究这个问题了,但我不知道如何让OnclickListener为它工作。如果你