最近项目需要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. h5聊天室web端(仿微博、微信)|h5仿微信网页端|仿微信界面弹窗

    这段时间一直在着手h5开发手机端聊天系统——html5仿微信聊天室,最近又在原先基础上开发了一个仿微信.微博网页web版聊天系统,使用到了HTML5+css3+jQuery+wcpop等技术开发,弹窗 ...

  2. python中range、xrange和randrange的区别

    range 函数说明:range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个列表. xrange 函数说明:和range 的用法完 ...

  3. C/C++ -- Gui编程 -- Qt库的使用 -- Qt编码问题

    1.直接使用QObject::trUtf8("中文字符串") 2.头文件<QTextCodec>QTextCodec::setCodecForTr(QTextCodec ...

  4. mysql数据库修改字符编码问题

    遇到这种情况,现有项目的数据库已经建好,数据表也已经创建完成. 问题来的,数据库不能插入中文,调试时候发现中文数据从发送请求到最后请求处理完成这些步骤,中文还没有发生乱码. 只有在存储到数据库后查询数 ...

  5. tomcat启动(一)startup.bat|catalina.bat分析

    环境:windows X64位 Tomcat8.0.47 bootstrap.jar是tomcat的内核 开始位置 startup.bat 查看文本 具体的批处理脚本语法可以查看我整理的文章 http ...

  6. 1-hadoop中遇到的各种异常

    本贴记录学习hadoop中遇到的各种异常, 包括推荐系统分类下的和本分类下的, 持续更新 1, 搭建ha时, active和standy之间不能自由切换 经检查, 配置文件错误, 私钥配置 root ...

  7. MySQL中date类型的空值0000-00-00和00:00:00

    1.如果mysql中使用了date类型,并且默认值为'0000-00-00', 那么数据库中的'0000-00-00 00:00:00', '0000-00-00', '00:00:00'这三个值是相 ...

  8. for循环-鼠标移入事件

    这里当鼠标移入触发事件时候,会报错,为什么呢?注意一下objs数组的长度是5. 因为在鼠标移入事件触发之前for循环已经将i变成5,objs[5]是不存在的,所以会报错. 可以用this来解决这种问题 ...

  9. 使用C# 开始第一个QQ机器人

    本示例将会使用”嘤鹉学舌”这个小插件的实现来演示如何使用Newbe.Mahua实现第一个机器人插件. 插件功能 自动将发送者的消息回发给发送人,嘤鹉(Parrot,其实是说嘤嘤嘤怪)学舌. 开发环境要 ...

  10. Behave用户自定义数据类型

    在step句子中, 所有的参数默认是string类型, 如果用户想使用复杂的或者其他数据类型, 就需要了解以下bahave中的数据类型. behave的数据类型转换器是在parse和cfparse中支 ...