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

效果图:

ListView的Adapter类

  1. private class SlideAdapter extends BaseAdapter {
  2.  
  3. private LayoutInflater mInflater;
  4.  
  5. SlideAdapter() {
  6. super();
  7. mInflater = getLayoutInflater();
  8. }
  9.  
  10. @Override
  11. public int getCount() {
  12. return mMessageItems.size();
  13. }
  14.  
  15. @Override
  16. public Object getItem(int position) {
  17. return mMessageItems.get(position);
  18. }
  19.  
  20. @Override
  21. public long getItemId(int position) {
  22. return position;
  23. }
  24.  
  25. @Override
  26. public View getView(int position, View convertView, ViewGroup parent) {
  27. ViewHolder holder;
  28.  
  29. ZQView slideView = (ZQView) convertView;
  30. if (slideView == null) {
  31. View itemView = mInflater.inflate(R.layout.list_item, null);
  32.  
  33. slideView = new ZQView(ActivityListViewDelete.this);
  34. slideView.setContentView(itemView);
  35. holder = new ViewHolder(slideView);
  36. slideView.setTag(holder);
  37. } else {
  38. holder = (ViewHolder) slideView.getTag();
  39. }
  40. MessageItem item = mMessageItems.get(position);
  41. slideView.shrink();
  42. holder.title.setText(item.title);
  43. holder.time.setText(item.time);
  44. holder.deleteHolder.setOnClickListener(ActivityListViewDelete.this);
  45.  
  46. return slideView;
  47. }
  48.  
  49. }
  50.  
  51. public class MessageItem {
  52. public String title;
  53. public String msg;
  54. public String time;
  55. }
  56.  
  57. private static class ViewHolder {
  58. public ImageView icon;
  59. public TextView title;
  60. public TextView time;
  61. public ViewGroup deleteHolder;
  62.  
  63. ViewHolder(View view) {
  64. icon = (ImageView) view.findViewById(R.id.icon);
  65. title = (TextView) view.findViewById(R.id.title);
  66. time = (TextView) view.findViewById(R.id.time);
  67. deleteHolder = (ViewGroup) view.findViewById(R.id.holder);
  68. }
  69. }
  70.  
  71. @Override
  72. public void onItemClick(AdapterView<?> parent, View view, int position,
  73. long id) {
  74. Toast.makeText(this, "onItemClick position=" + position, Toast.LENGTH_LONG).show();
  75.  
  76. }
  77.  
  78. @Override
  79. public void onClick(View v) {
  80. if (v.getId() == R.id.holder) {
  81. Toast.makeText(this, "删除操作", Toast.LENGTH_LONG).show();
  82.  
  83. }
  84. }

ExpandableListView的Adapter

  1. private Context context;
  2. private ListView listView;
  3. List<UserInfo> list;
  4.  
  5. public MyElvAdapter(Context context, ListView listView, List<UserInfo> list) {
  6. super();
  7. this.context = context;
  8. this.listView = listView;
  9. this.list=list;
  10. }
  11.  
  12. @Override
  13. public Object getChild(int arg0, int arg1) {
  14. // TODO Auto-generated method stub
  15. return list.get(arg0).getDatas().get(arg1);
  16. }
  17.  
  18. @Override
  19. public long getChildId(int arg0, int arg1) {
  20. // TODO Auto-generated method stub
  21. return 0;
  22. }
  23.  
  24. @Override
  25. public View getChildView(final int groupPosition, final int position,
  26. boolean arg2, View convertView, ViewGroup parent) {
  27.  
  28. final ViewHolder1 viewHolder1;
  29. if (convertView == null){
  30. convertView = LayoutInflater.from(context).inflate(R.layout.item2,
  31. null);
  32. viewHolder1=new ViewHolder1(convertView);
  33. convertView.setTag(viewHolder1);
  34.  
  35. }else {
  36. viewHolder1=(ViewHolder1)convertView.getTag();
  37. }
  38. new FrontViewToMove(viewHolder1.frontView, listView,200);
  39. viewHolder1.button.setOnClickListener(new OnClickListener() {
  40. @Override
  41. public void onClick(View v) {
  42. //删除事件,回调接口传参数
  43. onClickDeleteListenter.onItemClick(v,groupPosition,position);
  44. new FrontViewToMove(viewHolder1.frontView, listView,200).generateRevealAnimate(viewHolder1.frontView,0);
  45.  
  46. }
  47. });
  48. viewHolder1.textView.setTextSize(20);
  49. viewHolder1.textView.setTextColor(Color.DKGRAY);
  50. viewHolder1.textView.setText(" " + list.get(groupPosition).getDatas().get(position).getName());
  51. return convertView;
  52. }
  53.  
  54. class ViewHolder1 {
  55. private TextView textView;
  56. private View frontView;
  57. private Button button;
  58. public ViewHolder1(View view){
  59. textView= (TextView) view.findViewById(R.id.text);
  60. button = (Button) view.findViewById(R.id.btn_delete);
  61. frontView = view.findViewById(R.id.id_front);
  62. }
  63. }
  64.  
  65. // 删除接口回调方法
  66. private OnClickDeleteListenter onClickDeleteListenter = null;
  67. public void setOnClickDeleteListenter(OnClickDeleteListenter listener) {
  68. this.onClickDeleteListenter = listener;
  69. }
  70.  
  71. @Override
  72. public int getChildrenCount(int arg0) {
  73. // TODO Auto-generated method stub
  74. return (list!=null && list.size()>0)? list.get(arg0).getDatas().size() : 0;
  75. }
  76.  
  77. @Override
  78. public Object getGroup(int arg0) {
  79. // TODO Auto-generated method stub
  80. return list.get(arg0);
  81. }
  82.  
  83. @Override
  84. public int getGroupCount() {
  85. // TODO Auto-generated method stub
  86. return (list!=null && list.size()>0) ? list.size() : 0;
  87. }
  88.  
  89. @Override
  90. public long getGroupId(int arg0) {
  91. // TODO Auto-generated method stub
  92. return 0;
  93. }
  94.  
  95. @Override
  96. public View getGroupView(final int groupPosition, boolean isExpanded,
  97. View convertView, ViewGroup parent) {
  98. final ViewHolder viewHolder;
  99. if (convertView ==null){
  100. convertView = LayoutInflater.from(context).inflate(R.layout.item1,null);
  101. viewHolder =new ViewHolder(convertView);
  102. convertView.setTag(viewHolder);
  103. }else {
  104. viewHolder=(ViewHolder)convertView.getTag();
  105. }
  106. viewHolder.textView.setText("条目 " + list.get(groupPosition).getId());
  107. viewHolder.textView.setOnClickListener(new OnClickListener() {
  108. @Override
  109. public void onClick(View v) {
  110. Toast.makeText(context,"第一层点击操作",Toast.LENGTH_LONG).show();
  111. }
  112. });
  113. return convertView;
  114. }
  115.  
  116. @Override
  117. public boolean hasStableIds() {
  118. // TODO Auto-generated method stub
  119. return false;
  120. }
  121.  
  122. @Override
  123. public boolean isChildSelectable(int arg0, int arg1) {
  124. // TODO Auto-generated method stub
  125. return false;
  126. }
  127.  
  128. class ViewHolder {
  129. TextView textView;
  130. public ViewHolder(View view){
  131. textView= (TextView) view.findViewById(R.id.name);
  132. }
  133. }

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

源码下载: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. linux服务器---squid缓存

    Squid缓存 代理服务器会在本地硬盘设置缓存,这样可以提高网络效率 1修改squid配置文件“/etc/squid/squid.conf”,参数“cache_dir_ufs”就是设置缓存目录的 [r ...

  2. Vue源码解析之数组变异

    力有不逮的对象 众所周知,在 Vue 中,直接修改对象属性的值无法触发响应式.当你直接修改了对象属性的值,你会发现,只有数据改了,但是页面内容并没有改变. 这是什么原因? 原因在于: Vue 的响应式 ...

  3. MySQL Crash Course #16# Chapter 24. Using Cursors + mysql 循环

    mysql中游标的使用案例详解(学习笔记)这篇讲得相当直白好懂了. 索引: cursor 基础讲解 mysql 循环 书上的整合代码 cursor 基础讲解 cursor 有点类似于 JDBC 中的 ...

  4. COOKIE与SESSION、Django的用户认证、From表单

    一.COOKIE 与 SESSION 1.简介 1.cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. ...

  5. CSS style 属性

    CSS style 属性 定义和用法 必需的 type 属性规定样式表的 MIME 类型. type 属性指示 <style> 与 </style> 标签之间的内容. 值 &q ...

  6. mysql hang and srv_error_monitor_thread using 100% cpu(已解决)

    昨天晚上,运维过来说有台生产服务器的mysql cpu一直100%,新的客户端登录不了,但是已经在运行的应用都正常可用. 登录服务器后,top -H看了下,其中一个线程的cpu 一直100%,其他的几 ...

  7. 20145317彭垚《网络对抗》Exp7 网络欺诈技术防范

    20145317彭垚<网络对抗>Exp7 网络欺诈技术防范 基础问题回答 通常在什么场景下容易受到DNS spoof攻击? 在同一局域网下比较容易受到DNS spoof攻击,攻击者可以冒充 ...

  8. 20165310 java_blog_week2

    2165310 <Java程序设计>第2周学习总结 教材学习内容总结 了解Java变量 重点学习Boolean变量和类型转换规则 学习数组定义.使用方式 区别: int [] a,b [] ...

  9. ubuntu查询某个库的相关情况

    环境:Ubuntu 14.04 64bit 1.如:查询libjpeg库的位置 ldconfig -p |grep libjpeg 2.如:查询libjpeg库的相关名称 dpkg -l '*jpeg ...

  10. hdu 6168 Numbers

    Numbers Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total S ...