1. 程式人生 > >Android RecyclerView (四)初學,實現長按刪除一個Item.

Android RecyclerView (四)初學,實現長按刪除一個Item.

在上一篇中,我學到了如何給RecyclerView新增Item監聽器,在這裡,我想做到類似於可以長按某個Item然後彈出一個選單,選擇刪除這個Item的功能。這裡的程式碼我們還是使用前面寫的程式碼.
PopupMenu繫結一個menu然後進行顯示。
首先,我們在MyAdapter中先寫好刪除Item的方法,

public void removeItem(int pos){
        infos.remove(pos);
        notifyItemRemoved(pos);
    }
我們這裡傳入一個位置,就是要刪除的Item的位置.然後移除它就可以了。

在menu資料夾下新增一個menu_item.xml的佈局檔案

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
<item
    android:id="@+id/removeItem"
    android:title="刪除"
    app:showAsAction="never"
    ></item>
</menu>

這裡我們只有一個item就是用於顯示刪除選項。

然後在我們的MainActivity中新增如下程式碼

 public void showPopMenu(View view,final int pos){
        PopupMenu popupMenu = new PopupMenu(this,view);
        popupMenu.getMenuInflater().inflate(R.menu.item_menu,popupMenu.getMenu());
        popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            public
boolean onMenuItemClick(MenuItem item) { myAdapter.removeItem(pos); return false; } }); popupMenu.setOnDismissListener(new PopupMenu.OnDismissListener() { @Override public void onDismiss(PopupMenu menu) { Toast.makeText(getApplicationContext(), "關閉PopupMenu", Toast.LENGTH_SHORT).show(); } }); popupMenu.show(); } }

在MainActivity中我們添加了一個方法,這個方法的作用就是show出來剛才我們設定的那個選單佈局,

在這裡我們傳入了一個View 和一個int pos整形的位置引數。
上篇文章中,我們設定Item監聽器的時候有一個 LongClickListener的方法,就是來獲取長按的點選事件。

  myAdapter.setItemOnClickListener(new MyAdapter.OnItemOnClickLisener() {
            @Override
            public void onItemOnClickListener(View view, int pos) {
                Toast.makeText(MainActivity.this, "點選"+pos, Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onItemLongOnClickListener(View view, int pos) {
                showPopMenu(view,pos);

            }
        });

然後在這裡呼叫我們寫好的這個方法,傳入點選的View和他的位置,就可以做到刪除的功能了。