How to have ContextMenu when recycliewiew element is set to onLongClickListener

How can I create a context menu inside the RecyclerViewAdapter when the view is set to 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 an example of the image I want to achieve

enter image description here

+4
source share
2 answers

Based on my experience, I do not need to have the setOnLongClickListenercontext menu displayed, View.OnCreateContextMenuListenerwill do this for me.

Here is 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 I found to make this work: https://gist.github.com/gauravat16/e8e03496a4056829e65dede3c236da28

+3
source
+1

Source: https://habr.com/ru/post/1655229/


All Articles