当 recyclerview 项目设置为 onLongClickListener 时如何拥有 ContextMenu

How to have a ContextMenu when the recyclerview item is set onLongClickListener

当视图设置为 onLongClickListener 时,如何在 RecyclerViewAdapter 中有上下文菜单?

这是我的代码:

 public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

            public TextView name;

            public ViewHolder(View itemLayoutView) {

                super(itemLayoutView);
                name = (TextView) itemLayoutView.findViewById(R.id.rvname);

                itemLayoutView.setOnClickListener(this);
                itemLayoutView.setOnLongClickListener(new View.OnLongClickListener() {
                    @Override
                    public boolean onLongClick(View v) {
                        return false;
                    }

                });
            }

这是我想要实现的示例图片

您需要实施 PopupMenu 可以找到一个实现 here

根据我的经验,我不需要 setOnLongClickListener 来显示上下文菜单,View.OnCreateContextMenuListener 会帮我完成。

这是我的工作代码:

public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnCreateContextMenuListener {

    public TextView name;

    public ViewHolder(View itemLayoutView) {
        super(itemLayoutView);
        name = (TextView) itemLayoutView.findViewById(R.id.rvname);
        itemLayoutView.setOnClickListener(this);
        itemLayoutView.setOnCreateContextMenuListener(this);
    }

    @Override
    public void onClick(View v) {
        String location = name.getText().toString();
        Intent goFlip = new Intent(RecyclerAdapter.context, FlipActivity.class);
        Bundle bundle = new Bundle();
        bundle.putString("name", location);
        bundle.putInt("pos", getAdapterPosition());
        goFlip.putExtras(bundle);
        context.startActivity(goFlip);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        menu.setHeaderTitle("Select Action");
        MenuItem edit = menu.add(Menu.NONE,1,1,"Edit");
        MenuItem delete = menu.add(Menu.NONE,2,2,"Delete");


        edit.setOnMenuItemClickListener(onChange);
        delete.setOnMenuItemClickListener(onChange);
    }
    private final MenuItem.OnMenuItemClickListener onChange = new MenuItem.OnMenuItemClickListener() {
       @Override
       public boolean onMenuItemClick(MenuItem item) {
            switch (item.getItemId()){
                case 1:
                    Toast.makeText(context,"Edit",Toast.LENGTH_LONG).show();
                    return true;
                case 2:
                    Toast.makeText(context,"Delete",Toast.LENGTH_LONG).show();
                    return true;
            }
           return false;
       }
   };
}

我还想分享我发现的 link 让这项工作成功的方法: https://gist.github.com/gauravat16/e8e03496a4056829e65dede3c236da28