天天看点

Android中——实现RecyclerView长按弹出Menu(删除)点击之后删除大解析

话不多说直接上效果图:

Android中——实现RecyclerView长按弹出Menu(删除)点击之后删除大解析

点击删除后,该item移除

Android中——实现RecyclerView长按弹出Menu(删除)点击之后删除大解析

在实现这个功能之前,一定要先参考,因为我们需要制作menu菜单 这个删除的视图,链接为:

删除Menu 的制作

参考完之后,就是要来实现这个功能弹出的 menu删除功能了:

第一步,我们现在我们的 Adapter 适配器中添加 监听接口:

private OnItemClickListener onItemClickListener;
    public interface OnItemClickListener{
        void onItemLongClick(View view , int pos);
    }

    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
        this.onItemClickListener = onItemClickListener;
    }
           

第二步:

再在 onBindViewHolder 中添加长按 item 时响应逻辑:

if(onItemClickListener!=null) {
            viewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View v) {
                    onItemClickListener.onItemLongClick(viewHolder.itemView,i);
                    return false;
                }
            });
        }
           

这样配合之前我们在Fragment中写过的:

adapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {
            @Override
            public void onItemLongClick(final View view, final int pos) {
                PopupMenu popupMenu = new PopupMenu(getContext(),view);
                popupMenu.getMenuInflater().inflate(R.menu.menu_item,popupMenu.getMenu());

                //弹出式菜单的菜单项点击事件
                popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {

                    @Override
                    public boolean onMenuItemClick(MenuItem item) {
                            list.remove(pos);	//	删除
                            adapter.notifyItemRemoved(pos);
                            textView = view.findViewById(R.id.tv_time);
                            str = textView.getText().toString().trim();     //  得到这个item的时间值
                            deleteSqlList();    //  根据时间值删除数据库中的值
                        return false;
                    }
                });
                popupMenu.show();
            }
        });
           

就可以实现删除功能,不过问题问题来了,这里的删除仅仅只是删除了界面的item,并未真正的达到删除的目的,也就是说当我们关闭程序,再次打开时,该item仍然是存在的,那么要实现真正删除的话,我们就只需要进入到数据库中,删除掉这个item即可!