本案例主要实现了ListView和ExpandableListView的侧滑删除操作功能

效果图:

ListView的Adapter类

private class SlideAdapter extends BaseAdapter {

        private LayoutInflater mInflater;

        SlideAdapter() {
super();
mInflater = getLayoutInflater();
} @Override
public int getCount() {
return mMessageItems.size();
} @Override
public Object getItem(int position) {
return mMessageItems.get(position);
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder; ZQView slideView = (ZQView) convertView;
if (slideView == null) {
View itemView = mInflater.inflate(R.layout.list_item, null); slideView = new ZQView(ActivityListViewDelete.this);
slideView.setContentView(itemView);
holder = new ViewHolder(slideView);
slideView.setTag(holder);
} else {
holder = (ViewHolder) slideView.getTag();
}
MessageItem item = mMessageItems.get(position);
slideView.shrink();
holder.title.setText(item.title);
holder.time.setText(item.time);
holder.deleteHolder.setOnClickListener(ActivityListViewDelete.this); return slideView;
} } public class MessageItem {
public String title;
public String msg;
public String time;
} private static class ViewHolder {
public ImageView icon;
public TextView title;
public TextView time;
public ViewGroup deleteHolder; ViewHolder(View view) {
icon = (ImageView) view.findViewById(R.id.icon);
title = (TextView) view.findViewById(R.id.title);
time = (TextView) view.findViewById(R.id.time);
deleteHolder = (ViewGroup) view.findViewById(R.id.holder);
}
} @Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Toast.makeText(this, "onItemClick position=" + position, Toast.LENGTH_LONG).show(); } @Override
public void onClick(View v) {
if (v.getId() == R.id.holder) {
Toast.makeText(this, "删除操作", Toast.LENGTH_LONG).show(); }
}

ExpandableListView的Adapter

private Context context;
private ListView listView;
List<UserInfo> list; public MyElvAdapter(Context context, ListView listView, List<UserInfo> list) {
super();
this.context = context;
this.listView = listView;
this.list=list;
} @Override
public Object getChild(int arg0, int arg1) {
// TODO Auto-generated method stub
return list.get(arg0).getDatas().get(arg1);
} @Override
public long getChildId(int arg0, int arg1) {
// TODO Auto-generated method stub
return 0;
} @Override
public View getChildView(final int groupPosition, final int position,
boolean arg2, View convertView, ViewGroup parent) { final ViewHolder1 viewHolder1;
if (convertView == null){
convertView = LayoutInflater.from(context).inflate(R.layout.item2,
null);
viewHolder1=new ViewHolder1(convertView);
convertView.setTag(viewHolder1); }else {
viewHolder1=(ViewHolder1)convertView.getTag();
}
new FrontViewToMove(viewHolder1.frontView, listView,200);
viewHolder1.button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//删除事件,回调接口传参数
onClickDeleteListenter.onItemClick(v,groupPosition,position);
new FrontViewToMove(viewHolder1.frontView, listView,200).generateRevealAnimate(viewHolder1.frontView,0); }
});
viewHolder1.textView.setTextSize(20);
viewHolder1.textView.setTextColor(Color.DKGRAY);
viewHolder1.textView.setText(" " + list.get(groupPosition).getDatas().get(position).getName());
return convertView;
} class ViewHolder1 {
private TextView textView;
private View frontView;
private Button button;
public ViewHolder1(View view){
textView= (TextView) view.findViewById(R.id.text);
button = (Button) view.findViewById(R.id.btn_delete);
frontView = view.findViewById(R.id.id_front);
}
} // 删除接口回调方法
private OnClickDeleteListenter onClickDeleteListenter = null;
public void setOnClickDeleteListenter(OnClickDeleteListenter listener) {
this.onClickDeleteListenter = listener;
} @Override
public int getChildrenCount(int arg0) {
// TODO Auto-generated method stub
return (list!=null && list.size()>0)? list.get(arg0).getDatas().size() : 0;
} @Override
public Object getGroup(int arg0) {
// TODO Auto-generated method stub
return list.get(arg0);
} @Override
public int getGroupCount() {
// TODO Auto-generated method stub
return (list!=null && list.size()>0) ? list.size() : 0;
} @Override
public long getGroupId(int arg0) {
// TODO Auto-generated method stub
return 0;
} @Override
public View getGroupView(final int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
final ViewHolder viewHolder;
if (convertView ==null){
convertView = LayoutInflater.from(context).inflate(R.layout.item1,null);
viewHolder =new ViewHolder(convertView);
convertView.setTag(viewHolder);
}else {
viewHolder=(ViewHolder)convertView.getTag();
}
viewHolder.textView.setText("条目 " + list.get(groupPosition).getId());
viewHolder.textView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context,"第一层点击操作",Toast.LENGTH_LONG).show();
}
});
return convertView;
} @Override
public boolean hasStableIds() {
// TODO Auto-generated method stub
return false;
} @Override
public boolean isChildSelectable(int arg0, int arg1) {
// TODO Auto-generated method stub
return false;
} class ViewHolder {
TextView textView;
public ViewHolder(View view){
textView= (TextView) view.findViewById(R.id.name);
}
}

注:更新修复侧滑删除报错。

源码下载:https://github.com/DickyQie/ListViewExpandableListViewDelete

android--------ListView和ExpandableListView的侧滑删除操作的更多相关文章

  1. Android ListView与ExpandableListView设置分割线divider

    listview设置分割线需要以下操作: lv.setDivider(getResources().getDrawable(R.drawable.diyline)); ExpandableListVi ...

  2. Android ListView实现单击item出现删除按钮以及滑动出现删除按钮

    我自己一个人弄的公司的产品客户端,所以还是想记录下来以免忘记或者丢失... 在我的上一篇博文(点击打开链接)是一个文件管理的东西,基础组件也是ListView所以在此只是改动一下而已. 单击: 点击出 ...

  3. RecyclerView进阶:使用ItemTouchHelper实现拖拽和侧滑删除

    现在RecyclerView的应用越来越广泛了,不同的应用场景需要其作出不同的改变.有时候我们可能需要实现侧滑删除的功能,比如知乎首页的侧滑删除,又或者长按Item进行拖动与其他Item进行位置的交换 ...

  4. [技术博客] 通过ItemTouchHelper实现侧滑删除功能

    通过ItemTouchHelper实现侧滑删除功能 一.效果 二.具体实现 demo中演示的这种左滑删除的效果在手机APP中比较常用,安卓也为我们提供了专门的辅助类ItemTouchHelper来帮助 ...

  5. Android 自定义ListView Item侧滑删除

    本程序是基于网上开源项目修改而来,具体来源忘了,懒得搜了,如果有不合适的地方,请原作者联系我,我会及时回复和处理的! 该例子程序中主要包含两个ListView,一个是实现侧滑删除,一个是侧滑出菜单,代 ...

  6. QQ视差特效和ListView侧滑删除

    如图所示是效果图,当向下拉时,图片会被拉出来,松手后恢复.和ListView的侧滑删除   1.视差特效 首先图片是通过addHeaderView加上去的,所以在设置Adapter前先设置一个View ...

  7. android listview综合使用示例_结合数据库操作和listitem单击长按等事件处理

    本示例说明: 1.自定义listview条目样式,自定义listview显示列数的多少,灵活与数据库中字段绑定. 2.实现对DB的增删改查,并且操作后listview自动刷新. 3.响应用户操作点击事 ...

  8. Android实现RecyclerView侧滑删除和长按拖拽-ItemTouchHelper

    RecyclerView这个被誉为ListView和GirdView的替代品,它的用法在之前的一篇博文中就已经讲过了,今天我们就来实现RecyclerView的侧滑删除和长按拖拽功能,实现这两个功能我 ...

  9. xamarin.android pullToRefresharp.Android下拉刷新样式、侧滑删除功能

    如果你正则使用xamarin.From开发项目,那么listview一定是你比不可少的控件.但是由于xamarin的listview在安卓上的功能有限,所以经常需要使用Renderers来改写平台实现 ...

随机推荐

  1. Postman: Pre-request Script,设置body 变量

    1)Postman Pre-request Script 设置变量名 2)把变量放在body里 3)Send后查看变量是否被替换

  2. python 用正则表达式把”0102030405”分成5组('0', '1'), ('0', '2'), ('0', '3'), ('0', '4'), ('0', '5')

    把”0102030405”分成5组('0', '1'), ('0', '2'), ('0', '3'), ('0', '4'), ('0', '5') re.findall(r"(\d)(\ ...

  3. python webdriver 显示等待判断元素是可以被点击的,但是执行脚本时,却提示元素不能点击的解决办法?

    我之前运行没问题的环境是firefox版本50,对应的驱动是没有问题的,现在firefox自动升级到了60,驱动没有变,我试着把浏览器装回了50,再试就好了, 所以应该是浏览器跟驱动geckodriv ...

  4. mysql日志文件目录

    默认情况下mysql的二进制日志文件保存在默认的数据目录data下,如:/usr/local/mysql/data 修改日志保存目录(/backup/mysqlbinlog/mysql-bin)的话: ...

  5. 又一国产855旗舰突然现身:支持5G

    12月28日消息,中国联通官方微博放出了vivo NEX 5G版样机.如图所示,该机搭载骁龙855移动平台及X50 5G调制解调器. 早在8月30日,vivo就宣布完成了面向商用5G智能手机的软硬件开 ...

  6. java笔试题三(javaWeb)

    1.讲一下Servlet的执行过程,doGet和doPost的区别. 执行过程: 比如注解配置版本,先继承httpServlet,一旦发送get请求 调用,再执行post方法. doGet和doPos ...

  7. String和StringBuffer和StringBuilder

    String类 Java语言中用String类代表不可变的字符串,它是由任意多个字符组成的序列.程序中需要存储大量的信息时,一般都用String对象. 1.字符串初始化 JavaSE API为字符串对 ...

  8. shell脚本中如何使scp不输入密码即可传输文件

    答:使用ssh密钥对 示例如下: 如果A机想要获取B机上的文件,那么需要将在A机上生成的公钥放置到B机上的指定位置~/.ssh/authorized_keys 问题一: 如何在A机上生成ssh密钥对? ...

  9. POJ3436 ACM Computer Factory(最大流/Dinic)题解

    ACM Computer Factory Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8944   Accepted: 3 ...

  10. 【附8】zipkin

    一.zipkin作用 全链路追踪工具(查看依赖关系) 查看每个接口.每个service的执行速度(定位问题发生点或者寻找性能瓶颈) 二.zipkin工作原理 创造一些追踪标识符(tracingId,s ...