最近项目需要ListView左滑删除功能,搜集了很多资料发现了一个某一前辈写的库能很简单的实现这个功能,而且有源码,直接拿来使用了。

库名字叫做SwipeMenuListView,下面给大家演示一下使用方法,不用谢。

首先在项目中加入库,这个不再介绍了。

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#E3E6ED"> <com.baoyz.swipemenulistview.SwipeMenuListView
android:id="@+id/collector_listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="#00000000"
android:dividerHeight="1dp"
android:fadingEdge="none"
android:fastScrollEnabled="false"
android:smoothScrollbar="true">
</com.baoyz.swipemenulistview.SwipeMenuListView> <TextView
android:id="@+id/collector_listview_empty"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="@string/listisempty"
android:textColor="@color/black"
android:textAppearance="?android:attr/textAppearanceLarge">
</TextView> </LinearLayout>

数据适配器:

/*
* 采集器列表数据适配器
* @author guopeng
* @created 2015年12月4日
*/
public class CollectorListAdapter extends BaseAdapter { private List<SystemDevice> listItems;//数据集合
private LayoutInflater layoutinflater;//视图容器,用来导入布局 static class ViewHolder
{
private TextView serialNumber;
private TextView articleNumber;
private ImageView image;
} /*
* 实例化Adapter
*/
public CollectorListAdapter(Context context, List<SystemDevice> dataSet)
{
this.listItems = dataSet;
this.layoutinflater = LayoutInflater.from(context);
} @Override
public int getCount() {
return listItems.size();
} @Override
public Object getItem(int position) {
return listItems.get(position);
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
SystemDevice device = listItems.get(position);
ViewHolder holder;
View view;
if(convertView == null)
{
holder= new ViewHolder();
//获取listitem布局文件
view = layoutinflater.inflate(R.layout.collectorlist_listitem, null); //获取控件对象
holder.serialNumber = (TextView) view.findViewById(R.id.collectorlist_serialnumber);
holder.articleNumber = (TextView) view.findViewById(R.id.collectorlist_articlelnumber);
holder.image = (ImageView) view.findViewById(R.id.collectorlist_image); view.setTag(holder);
}
else
{
view = convertView;
holder = (ViewHolder) view.getTag();
} //设置图片和文字
holder.serialNumber.setText(String.valueOf(device.getSerialNumber()));
holder.articleNumber.setText(String.valueOf(device.getArticleNumber())); return view;
} }

实现代码:

    private SwipeMenuListView listView;

//初始化ListView数据,在OnCreate方法中调用
private void initData()
{
final List<SystemDevice> data = new SystemDeviceDao(context).queryAllSystemDevice();
final CollectorListAdapter adapter = new CollectorListAdapter(context, data); listView.setAdapter(adapter);
listView.setEmptyView(activity.findViewById(R.id.collector_listview_empty)); // step 1. create a MenuCreator
SwipeMenuCreator creator = new SwipeMenuCreator()
{
@Override
public void create(SwipeMenu menu)
{
// create "open" item
SwipeMenuItem openItem = new SwipeMenuItem(activity.getApplicationContext());
// set item background
openItem.setBackground(new ColorDrawable(Color.rgb(0xC9, 0xC9, 0xCE)));
// set item width
openItem.setWidth(dp2px(90));
// set item title
openItem.setTitle("打开");
// set item title fontsize
openItem.setTitleSize(18);
// set item title font color
openItem.setTitleColor(Color.WHITE);
// add to menu
menu.addMenuItem(openItem); // create "delete" item
SwipeMenuItem deleteItem = new SwipeMenuItem(activity.getApplicationContext());
// set item background
deleteItem.setBackground(new ColorDrawable(Color.rgb(0xF9, 0x3F, 0x25)));
// set item width
deleteItem.setWidth(dp2px(90));
// set a icon
deleteItem.setIcon(R.drawable.ic_delete);
// add to menu
menu.addMenuItem(deleteItem);
}
}; // set creator
listView.setMenuCreator(creator); // step 2. listener item click event
listView.setOnMenuItemClickListener(new OnMenuItemClickListener()
{
@Override
public void onMenuItemClick(int position, SwipeMenu menu, int index)
{
SystemDevice device = data.get(position); switch (index)
{
case 0:
// open
open(device);
break;
case 1:
// delete
delete(device);
data.remove(position);
adapter.notifyDataSetChanged();
break;
}
}
}); // set SwipeListener
listView.setOnSwipeListener(new OnSwipeListener()
{
@Override
public void onSwipeStart(int position)
{
// swipe start
} @Override
public void onSwipeEnd(int position)
{
// swipe end
}
}); listView.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) { SystemDevice device = data.get(position);
open(device);
}
});
} private int dp2px(int dp) {
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp,
getResources().getDisplayMetrics());
} /**
* 打开
* @param item
*/
private void open(SystemDevice item)
{ } /**
* 删除
* @param item
*/
private void delete(SystemDevice item)
{ }

效果:

可以自定义左滑功能,大家自己开发。

Android ListView左滑删除、左滑自定义功能的更多相关文章

  1. Android ListView复制、删除的实现

    适配器MyAdapter: package com.zihao.adapter; import java.util.List; import com.zihao.popdemo.R; import c ...

  2. Android ListView实现仿iPhone实现左滑删除按钮

    需要自定义ListView.这里就交FloatDelListView吧. 复写onTouchEvent方法.如下: @Override public boolean onTouchEvent(Moti ...

  3. Android SwipeToDismiss:左滑/右滑删除ListView条目Item

     <Android SwipeToDismiss:左右滑动删除ListView条目Item> Android的SwipeToDismiss是github上一个第三方开源框架(githu ...

  4. Android开发学习之路-PopupWindow和仿QQ左滑删除

    这周作业,要做一个类似QQ的左滑删除效果的ListView,因为不想给每个item都放一个按钮,所以决定用PopupWindow,这里记录一下 先放一下效果图: 先说明一下这里面的问题: ①没有做到像 ...

  5. [转]ANDROID仿IOS微信滑动删除_SWIPELISTVIEW左滑删除例子

    转载:http://dwtedx.sinaapp.com/itshare_290.html 本例子实现了滑动删除ListView的Itemdemo的效果.大家都知道.这种创意是来源于IOS的.左滑删除 ...

  6. Android滑动列表(拖拽,左滑删除,右滑完成)功能实现(1)

    场景: 近期做的TODO APP需要在主页添加一个功能,就是可以左滑删除,右滑完成.看了一下当前其他人做的例如仿探探式的效果,核心功能基本一样,但是和我预想的还是有少量区别,于是干脆自己重头学一遍如何 ...

  7. Android -- RecyclerView实现左滑删除

    1,在实际项目中我们常常有对一个列表进行滑删除操作,使用我们昨天的ItemTouchHelper其实也可以实现简单的实现这个功能,先来看一下使用ItemTouchHelper来实现的效果: 2,从上面 ...

  8. 类似QQ消息左滑删除的Demo

    最近在网上学到一篇类似QQ消息左滑删除的demo,完善了下代码,感觉还不错,特此分享一波: CustomSwipeListView.java 是个继承自ListView的类,里面调用了自定义View ...

  9. 模仿QQ左滑删除

    需求: 1.左滑删除 2.向左滑动距离超过一半的时候让它自动滑开,向右滑动超过一半的时候自动隐藏 3.一次只允许滑开一个item 还有,根本不需要自定义view来实现,谨防入坑 布局: <?xm ...

随机推荐

  1. 【jQuery源码】preFilter

    preFilter: { "ATTR": function( match ) { //属性名解码 match[1] = match[1].replace( runescape, f ...

  2. 关于daterangepicker取消默认值的设置

    1.项目中用到了daterangepicker这个插件,需求要求不能有默认值. 2.查资料得知,可以修改插件内的属性 autoUpdateInput值来实现这个效果. 顾虑有二: 1.修改插件内容,导 ...

  3. Etcd安全配置之Basic Auth认证

    <中小团队落地配置中心详解>文章中我们介绍了如何基于Etcd+Confd构建配置中心,最后提到Etcd的安全问题时说了可以使用账号密码认证以达到安全访问的目的,究竟该如何开启认证以及怎么设 ...

  4. facebook 摘要生成阅读笔记(一) A Neural Attention Model for Sentence Summarization

    流程: 1.文本和摘要全部输入到模型中. 2.训练时,对生成摘要取前C个词,从头开始取,如果生成的摘要不足C,那么不足的地方直接补<s>. 3.训练时,最大化生成的摘要与原摘要的概率,即每 ...

  5. Linux-(vmstat,iostat,netstat)

    vmstat命令 vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存.进程.CPU活动进行监控.他是对系统的整体情况进行统计,不足之处是无 ...

  6. Java 集合框架(三)—— LinkedList

    三.链表 —— LinkedList ArrayList 虽然好用,但是数组和数组列表都有一个重大的缺陷:从数组的中间位置删除一个元素要付出很大的代价,其原因是数组中处于被删除元素之后的所有元素都要向 ...

  7. Nodejs学习笔记(四)—与MySQL交互(felixge/node-mysql)

    简介和安装 Node.js与MySQL交互操作有很多库,具体可以在 https://www.npmjs.org/search?q=mysql  查看. 我选择了felixge/node-mysql,用 ...

  8. Keepalived配置与使用--转载

    作者: JeremyWei | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明 网址: http://weizhifeng.net/using-keepalived.html 介绍 ...

  9. NOI2018 退役记

    退役预订... upd 果然就这么不光荣的退役了... 我居然考出了一场只有两题得分的比赛,我好菜啊... 不过高三充(tui)实(fei)的生活应该很有意思... 大家一起加油吧!!!

  10. C#.NET下转换泛型列表为JSON格式

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Te ...