SwipeMenuListView实现类似于QQ侧滑删除效果

版权声明:本文为博主原创文章,转载请注明出处 https://blog.csdn.net/fengyu_xueer/article/details/71487271

前言:最近,因为项目需要实现删除功能,为了美观采用了类似于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,到此就实现了简单的侧滑删除!

猜你喜欢

转载自blog.csdn.net/fengyu_xueer/article/details/71487271