本案例主要实现了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. 本地缓存之GUAVA

    项目开发中,很多配置数据需要缓存,一般来说,开发人员都会手动写HashMap,HashSet或者ConcurrentHashMap,ConcurrentHashSet缓存数据,但是这样的缓存往往存在内 ...

  2. 2018-2019-2 20165209 《网络对抗技术》Exp1:PC平台逆向破解

    2018-2019-2 20165209 <网络对抗技术>Exp1:PC平台逆向破解 1 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件 ...

  3. 使用 SSH 和 SFTP 协议

    通过 SSH 和 SFTP 协议,我们能够访问其他设备,有效而且安全的传输文件等等. 几年前,我决定配置另外一台电脑,以便我能在工作时访问它来传输我所需要的文件.要做到这一点,最基本的一步是要求你的网 ...

  4. API和正则表达式

    第一章 String & StringBuilderString类用类final修饰,不能被继承,String字符串被创建后永远无法被改变,但字符串引用可以重新赋值,改变引用的指向java字符 ...

  5. Linux 系统版本信息

    1.# uname -a   (Linux查看版本当前操作系统内核信息) 2.# cat /proc/version (Linux查看当前操作系统版本信息) 3.# cat /etc/issue  或 ...

  6. 利用Python网络爬虫爬取学校官网十条标题

    利用Python网络爬虫爬取学校官网十条标题 案例代码: # __author : "J" # date : 2018-03-06 # 导入需要用到的库文件 import urll ...

  7. (GO_GTD_3)基于OpenCV和QT,建立Android图像处理程序

    一.解决权限问题     图片采集了,处理了,如何保存?最直接的方法是使用imwrite,但是如果现在直接使用的话,比如会出现这样或那样的错误,因为我们现在是在android的环境下进行图像处理,所以 ...

  8. 20145322 Exp5 利用nmap扫描

    20145322 Exp5 利用nmap扫描 实验过程 使用命令创建一个msf所需的数据库 service postgresql start msfdb start 使用命令msfconsole开启m ...

  9. Linux必备知识

    一.Linux命令行常用快捷键 在企业工作中,管理Linux时—般不会直接采用键盘.显示器登录系统,而是会通过网络在远程进行管理,因此,需要通过远程连接具连接到Linux系统中.目前最常用的Linux ...

  10. Linux写时拷贝技术【转】

    本文转载自:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/20/2601655.html COW技术初窥: 在Linux程序中,fork()会产 ...