话不多说直接上效果图:
点击删除后,该item移除
在实现这个功能之前,一定要先参考,因为我们需要制作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即可!