Search code examples
androidandroid-recyclerviewandroid-contextmenu

My RecyclerView ContextMenu doesn't show


Where did I get this wrong? My Context Menu doesn't show, I already moved the setOnCreateContextMenuListener and OnCreateContextMenu Inside my ViewHolder and still doesn't show.

public class ViewHolder extends RecyclerView.ViewHolder implements View.OnCreateContextMenuListener {
    ImageView imageview;
    TextView textView;

    public ViewHolder(View itemView) {
        super(itemView);
        imageview = itemView.findViewById(R.id.thumbImage);
        textView = itemView.findViewById(R.id.tv_imageName);
        itemView.setOnCreateContextMenuListener(getActivity());
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo;
        String id = fArray.get(info.position).substring(fArray.get(info.position).lastIndexOf("/")+1).replace(".jpg", "");
        if (v.getId()==R.id.gridView1) {
            menu.setHeaderTitle(id);
            EditName = id;
            String[] menuItems = {"Edit"};

            for (int i = 0; i<menuItems.length; i++) {
                menu.add(Menu.NONE, i, i, menuItems[i]);
            }
        }
    }
}

Solution

  •  public class ViewHolder extends RecyclerView.ViewHolder implements View.OnCreateContextMenuListener, MenuItem.OnMenuItemClickListener {
          ImageView imageview;
          TextView textView;
            public ViewHolder(View itemView) {
                super(itemView);
                imageview = itemView.findViewById(R.id.thumbImage);
                textView = itemView.findViewById(R.id.tv_imageName);
                itemView.setOnCreateContextMenuListener(this);
    
            }
    
    
            @Override
            public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
                MenuItem star=menu.add(Menu.NONE,1,1,"Star");
                MenuItem edit=menu.add(Menu.NONE,2,2,"Edit");
                MenuItem delete=menu.add(Menu.NONE,3,3,"Delete");
                star.setOnMenuItemClickListener(this);
                edit.setOnMenuItemClickListener(this);
                delete.setOnMenuItemClickListener(this);
            }
    
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                int s1=list.get(getAdapterPosition()).getId();
                switch (item.getItemId()){
                    case 1:
                        Toast.makeText(context, "pressed on star", Toast.LENGTH_SHORT).show();
                        break;
                    case 2:
                        Toast.makeText(context, "pressed on edit", Toast.LENGTH_SHORT).show();
                        break;
                    case 3:
                        Toast.makeText(context, "pressed on edit", Toast.LENGTH_SHORT).show();
                        break;
    
                }
                return true;
            }
        }
    

    hope this will help you.