1. 程式人生 > >SwipeMenuListView實現類似於QQ側滑刪除效果

SwipeMenuListView實現類似於QQ側滑刪除效果

前言:最近,因為專案需要實現刪除功能,為了美觀採用了類似於QQ的那種側滑刪除效果,使用的是SwipeMenuListView的開源控制元件,現將使用方法記錄分享一下,有興趣的童鞋可以看看。效果如下圖:

這裡寫圖片描述

1、新增依賴

方法1:下載開源庫程式碼,將程式碼複製貼上到自己的專案程式碼中,推薦使用此方法(Android Studio開發也可以採用此方法),此方法便於修改和檢視原始碼

方法2:下載程式碼,將library匯入,專案新增依賴庫。

方法3:compile ‘com.baoyz.swipemenulistview:library:1.3.0’

2、使用

佈局檔案新增控制元件

<com.baoyz.swipemenulistview.SwipeMenuListView
         android:id="@+id/lv_list"
         android:layout_width="match_parent"
         android:layout_height="match_parent" />

初始化選單配置

// 初始化選單配置
            SwipeMenuCreator creator = new SwipeMenuCreator() {

                @Override
public void create(SwipeMenu menu) { // 建立刪除功能選單 SwipeMenuItem openItem = new SwipeMenuItem(project3d.this); // 設定選單的背景 openItem .setBackground(new ColorDrawable(Color.rgb(0xf9, 0x3f, 0x2f))); // 設定選單寬度(必須設定,否則不顯示)
openItem .setWidth(160); // 選單標題 openItem .setTitle("開啟"); // 設定標題文字大小 openItem .setTitleSize(20); // 標題顏色 openItem .setTitleColor(Color.WHITE); // 新增到menu menu.addMenuItem(openItem ); // 建立新增功能選單 SwipeMenuItem deleteItem = new SwipeMenuItem(project3d.this); // 設定選單的背景 deleteItem .setBackground(new ColorDrawable(Color.rgb(0xf9, 0x3f, 0x2f))); // 設定選單寬度(必須設定,否則不顯示) deleteItem .setWidth(160); // 選單標題 deleteItem .setTitle("刪除"); // 設定標題文字大小 deleteItem .setTitleSize(20); // 標題顏色 deleteItem .setTitleColor(Color.WHITE); // 新增到menu menu.addMenuItem(deleteItem ); } };

選單與ListView關聯

mInvestigationList.setMenuCreator(creator);

選單點選事件

mInvestigationList.setOnMenuItemClickListener(new OnMenuItemClickListener() {
                // position為點選的ListView條目位置,index為點選的選單的位置
                @Override
                public void onMenuItemClick(int position, SwipeMenu menu, int index) {
                    switch (index) {
                    case 0:
                        UIUtils.showToast(project3d.this, "點選了開啟選單");
                        break;
                    case 1:
                        UIUtils.showToast(project3d.this, "點選了刪除選單");
                        break;
                    }
                }
            });

遇到的問題,及解決方法

問題描述:刪除操作時發現刪除的位置發生錯亂,刪除第一條,結果最後一條被刪除了
問題原因:SwipeMenuAdapter這個類的getview方法有一個判斷,是為了快取加的
問題解決方案:註釋掉判斷操作
@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        SwipeMenuLayout layout = null;
        //2017.05.05修改,註釋掉是為了解決刪除位置錯亂問題
        //if (convertView == null) {
            View contentView = mAdapter.getView(position, convertView, parent);
            SwipeMenu menu = new SwipeMenu(mContext);
            menu.setViewType(mAdapter.getItemViewType(position));
            createMenu(menu);
            SwipeMenuView menuView = new SwipeMenuView(menu,
                    (SwipeMenuListView) parent);
            menuView.setOnSwipeItemClickListener(this);
            SwipeMenuListView listView = (SwipeMenuListView) parent;
            layout = new SwipeMenuLayout(contentView, menuView,
                    listView.getCloseInterpolator(),
                    listView.getOpenInterpolator());
            layout.setPosition(position);
//      } else {
//          layout = (SwipeMenuLayout) convertView;
//          layout.closeMenu();
//          layout.setPosition(position);
//          View view = mAdapter.getView(position, layout.getContentView(),
//                  parent);
//      }
        return layout;
    }

OK,到此就實現了簡單的側滑刪除!