首页 > 解决方案 > 上下文菜单在回收站视图中不起作用

问题描述

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

  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);

标签: androidcontextmenu

解决方案


问题出在您的OnLongClickListener上。当您返回 true 时,它​​会消耗长点击事件。

onLongClick方法文档:

如果回调消耗了长按,则为 true,否则为 false。

由于您需要在 onLongClick 中创建,因此您必须从您的系统ContextMenu返回,以便系统可以创建。falseOnLongClickListenerContextMenu

更新您的OnLongClickListener

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

推荐阅读