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

倾然丶 夕夏残阳落幕 提交于 2020-01-03 15:50:11

问题


How can I have a context menu inside the RecyclerViewAdapter when the view is set onLongClickListener?

Here is my code:

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

                });
            }

Here is the example image that I want to achieve


回答1:


Based on my experience I do not need to have setOnLongClickListener to make the context menu appear, View.OnCreateContextMenuListener will do that for me.

Here's my working code:

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

I also want to share the link that I found to make this work: https://gist.github.com/gauravat16/e8e03496a4056829e65dede3c236da28




回答2:


You need to implement PopupMenu An implementation can be found here



来源:https://stackoverflow.com/questions/39600501/how-to-have-a-contextmenu-when-the-recyclerview-item-is-set-onlongclicklistener

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!