How to create context menu for RecyclerView

后端 未结 21 2717
日久生厌
日久生厌 2020-11-28 01:20

How do I implement context menu for RecyclerView? Apparently calling registerForContextMenu(recyclerView) doesn\'t work. I\'m calling it from a fra

21条回答
  •  心在旅途
    2020-11-28 02:19

    I maybe late to the party but I have an working solution. I have made an gist for it.

    Add Context Menu to RecyclerView

    ActivityName.java

    //Import Statements
    
    public class ActivityName extends AppCompatActivity {
        private RecyclerView mRecyclerView;
        private RecyclerView.Adapter mAdapter;
        private RecyclerView.LayoutManager mLayoutManager;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_view_birthdays);
    
    
            //Recycle View
            mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
            mLayoutManager = new LinearLayoutManager(getApplicationContext());
            mRecyclerView.setLayoutManager(mLayoutManager);
            mAdapter = new BirthdaysListAdapter(data, this);
            mRecyclerView.setAdapter(mAdapter);
    
    
        }
    

    RecyclerAdapter.java

    //Import Statements
    
    
    public class BirthdaysListAdapter extends RecyclerView.Adapter {
        static Context ctx;
    
        private List Data;
    
    
        public BirthdaysListAdapter(List list, Context context) {
            Data = list;
            this.ctx = context;
    
        }
    
        BirthdaysListAdapter() {
        }
    
        public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnCreateContextMenuListener {
            public TextView name;
            public TextView Birthday;
            public ImageView colorAlphabet;
            public TextView textInImg;
    
    
            public ViewHolder(View v) {
                super(v);
                name = (TextView) v.findViewById(R.id.name);
                Birthday = (TextView) v.findViewById(R.id.Birthday);
                colorAlphabet = (ImageView) v.findViewById(R.id.colorAlphabet);
                textInImg = (TextView) v.findViewById(R.id.textInImg);
    
    
                v.setOnCreateContextMenuListener(this); //REGISTER ONCREATE MENU LISTENER
            }
    
            @Override
            public void onCreateContextMenu(ContextMenu menu, View v                         //CREATE MENU BY THIS METHOD
                                            ContextMenu.ContextMenuInfo menuInfo) {
                new BirthdaysListAdapter().info = (AdapterView.AdapterContextMenuInfo) menuInfo;
                MenuItem Edit = menu.add(Menu.NONE, 1, 1, "Edit");
                MenuItem Delete = menu.add(Menu.NONE, 2, 2, "Delete");
                Edit.setOnMenuItemClickListener(onEditMenu);
                Delete.setOnMenuItemClickListener(onEditMenu);
    
    
            }
    //ADD AN ONMENUITEM LISTENER TO EXECUTE COMMANDS ONCLICK OF CONTEXT MENU TASK
            private final MenuItem.OnMenuItemClickListener onEditMenu = new MenuItem.OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(MenuItem item) {
    
    
                    DBHandler dbHandler = new DBHandler(ctx);
                    List data = dbHandler.getWishmen();
    
                    switch (item.getItemId()) {
                        case 1:
                            //Do stuff
                            break;
    
                        case 2:
                           //Do stuff
    
                            break;
                    }
                    return true;
                }
            };
    
    
        }
    
    
        public List getData() {
            return Data;
        }
    
    
        @Override
        public long getItemId(int position) {
    
            return super.getItemId(position);
        }
    
    
        @Override
        public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_view_birthdays, parent, false);
            ViewHolder vh = new ViewHolder(view);
            return vh;
        }
    
        @Override
        public void onBindViewHolder(final ViewHolder holder, int position) {
            holder.name.setText(Data.get(position).getMan().getName());
            holder.Birthday.setText(Data.get(position).getMan().getBday());
            holder.colorAlphabet.setBackgroundColor(Color.parseColor(Data.get(position).getColor()));
            holder.textInImg.setText(String.valueOf(Data.get(position).getMan().getName().toUpperCase().charAt(0)));
               }
    
    
        @Override
        public int getItemCount() {
            return Data.size();
        }
    
        private int position;
    
        public int getPosition() {
    
            return position;
        }
    
        public void setPosition(int position) {
            this.position = position;
        }
    
    }
    

提交回复
热议问题