您的位置:首页 > 其它

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

2017-05-09 18:49 387 查看
前言:最近,因为项目需要实现删除功能,为了美观采用了类似于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);


菜单点击事件

mInvestigationLi
981f
st.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,到此就实现了简单的侧滑删除!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: