上下文菜单在回收站视图中不起作用

Context menu not working in recycler view

我正在尝试在回收站视图中添加上下文菜单,但它不起作用。 在我的适配器中,我添加了以下

  public class ViewHolder extends RecyclerView.ViewHolder implements 
   View.OnCreateContextMenuListener {
    TextView mTitle, mDescription;

    public ViewHolder(View itemView) {
        super(itemView);
        mTitle = itemView.findViewById(R.id.textViewTitle);
        mDescription = itemView.findViewById(R.id.textViewDescription);
        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int position = getAdapterPosition();
                String title = mTitle.getText().toString();
                String descrpition = mDescription.getText().toString();
                if (mClickListener!=null)
                    mClickListener.onItemClick(v, position, title, descrpition);
            }
        });
        itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                int position = getAdapterPosition();
                if (onRecyclerViewLongClickListner!=null)
                    onRecyclerViewLongClickListner.onItemLongClick(position);
                return true;
            }
        });
        itemView.setOnCreateContextMenuListener(this);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        menu.setHeaderTitle("Select options");
        menu.add(0,v.getId(),0,"Option1");
    }
}

并在 mainActivity 中添加了 registerForContextMenu(recyclerView);

问题出在您的 OnLongClickListener 上。它会消耗长按事件,因为您 return 是真的。

来自 onLongClick 方法文档:

true if the callback consumed the long click, false otherwise.

由于您需要在 onLongClick 中创建 ContextMenu,因此您必须从 OnLongClickListener return false 以便系统可以创建 ContextMenu.

更新您的 OnLongClickListener

  itemView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            int position = getAdapterPosition();
            if (onRecyclerViewLongClickListner!=null)
                onRecyclerViewLongClickListner.onItemLongClick(position);
              return false;
        }
    });