领导看到iphone上tableview有个滑动删除的效果,要求在android上也实现,搜了下资料,实现起来比较简单,可弄到后面,居然不能点击了,把一篇文章中的代码修改了一下,捣鼓了一番,搞定,下面是代码:

 1 package com.example.listsildedel;
 2
 3 import java.util.ArrayList;
 4 import java.util.List;
 5
 6 import android.app.Activity;
 7 import android.content.Intent;
 8 import android.os.Bundle;
 9 import android.widget.ListView;
10
11 public class MainActivity extends Activity {
12
13     private ListView mListView;
14     @Override
15     public void onCreate(Bundle savedInstanceState) {
16         super.onCreate(savedInstanceState);
17         setContentView(R.layout.activity_main);
18         mListView = (ListView) this.findViewById(R.id.list);
19         List<String> list = new ArrayList<String>();
20         for(int i=0;i<10;i++){
21             list.add("选项"+i);
22         }
23         //实例化自定义内容适配类
24         MyAdapter adapter = new MyAdapter(this, this,list);
25         //为listView设置适配
26         mListView.setAdapter(adapter);
27     }
28
29     public void openActivity(){
30         Intent intent  = new Intent(this, TestActivity.class);
31         startActivity(intent);
32     }
33
34 }

adapter:

  1 package com.example.listsildedel;
  2
  3 import java.util.List;
  4
  5 import android.content.Context;
  6 import android.view.LayoutInflater;
  7 import android.view.MotionEvent;
  8 import android.view.View;
  9 import android.view.View.OnClickListener;
 10 import android.view.View.OnTouchListener;
 11 import android.view.ViewGroup;
 12 import android.widget.BaseAdapter;
 13 import android.widget.Button;
 14 import android.widget.TextView;
 15
 16 public class MyAdapter extends BaseAdapter {
 17
 18     private List<String> arrays = null;
 19     private Context mContext;
 20     private Button curDel_btn;
 21     private float x,ux;
 22     private MainActivity mActivity;
 23
 24     public MyAdapter(MainActivity activity, Context mContext, List<String> arrays) {
 25         this.mContext = mContext;
 26         this.arrays = arrays;
 27         mActivity = activity;
 28
 29     }
 30
 31     public int getCount() {
 32         return this.arrays.size();
 33     }
 34
 35     public Object getItem(int position) {
 36         return null;
 37     }
 38
 39     public long getItemId(int position) {
 40         return position;
 41     }
 42
 43     public View getView(final int position, View view, ViewGroup arg2) {
 44         ViewHolder viewHolder = null;
 45         if (view == null) {
 46             viewHolder = new ViewHolder();
 47             view = LayoutInflater.from(mContext).inflate(R.layout.item, null);
 48             viewHolder.tvTitle = (TextView) view.findViewById(R.id.title);
 49             viewHolder.btnDel = (Button) view.findViewById(R.id.del);
 50             view.setTag(viewHolder);
 51         } else {
 52             viewHolder = (ViewHolder) view.getTag();
 53         }
 54         //换掉了原来listview中的onItemClick
 55         <span style="font-size:18px;"><strong>view.setOnClickListener(new OnClickListener() {
 56
 57             public void onClick(View v) {
 58                 // TODO Auto-generated method stub
 59                 mActivity.openActivity();
 60             }
 61         });</strong></span>
 62
 63
 64         //为每一个view项设置触控监听
 65         view.setOnTouchListener(new OnTouchListener() {
 66             public boolean onTouch(View v, MotionEvent event) {
 67
 68                 final ViewHolder holder = (ViewHolder) v.getTag();
 69
 70                 //当按下时处理
 71                 if (event.getAction() == MotionEvent.ACTION_DOWN) {
 72
 73 //                    //设置背景为选中状态
 74 //                    v.setBackgroundResource(R.drawable.mm_listitem_pressed);
 75                     //获取按下时的x轴坐标
 76                     x = event.getX();
 77                     //判断之前是否出现了删除按钮如果存在就隐藏
 78                     if (curDel_btn != null) {
 79                         if(curDel_btn.getVisibility() == View.VISIBLE){
 80                             curDel_btn.setVisibility(View.GONE);
 81                             return true;
 82                         }
 83                     }
 84
 85                 } else if (event.getAction() == MotionEvent.ACTION_UP) {// 松开处理
 86
 87                     //设置背景为未选中正常状态
 88                     //v.setBackgroundResource(R.drawable.mm_listitem_simple);
 89                     //获取松开时的x坐标
 90                     ux = event.getX();
 91
 92                     //判断当前项中按钮控件不为空时
 93                     if (holder.btnDel != null) {
 94
 95                         //按下和松开绝对值差当大于20时显示删除按钮,否则不显示
 96
 97                         if (Math.abs(x - ux) > 20) {
 98                             holder.btnDel.setVisibility(View.VISIBLE);
 99                             curDel_btn = holder.btnDel;
100                             return true;
101                         }
102                     }
103                 } else if (event.getAction() == MotionEvent.ACTION_MOVE) {//当滑动时背景为选中状态
104                     return true;
105                     //v.setBackgroundResource(R.drawable.mm_listitem_pressed);
106
107
108                 } else {//其他模式
109                     //设置背景为未选中正常状态
110                     //v.setBackgroundResource(R.drawable.mm_listitem_simple);
111
112                 }
113
114                 return false;
115             }
116         });
117         viewHolder.tvTitle.setText(this.arrays.get(position));
118
119         //为删除按钮添加监听事件,实现点击删除按钮时删除该项
120         viewHolder.btnDel.setOnClickListener(new OnClickListener() {
121
122             public void onClick(View v) {
123                 if(curDel_btn!=null)
124                     curDel_btn.setVisibility(View.GONE);
125                 arrays.remove(position);
126                 notifyDataSetChanged();
127
128             }
129         });
130         return view;
131
132     }
133
134     final static class ViewHolder {
135         TextView tvTitle;
136         Button btnDel;
137     }
138 }

      

代码下载: http://download.csdn.net/detail/wulingbo2005/6691885

转载请注明出处

转载于:https://www.cnblogs.com/ProgramBull/p/3477917.html

android中listview的item滑动删除效果(已解决listview点击问题)相关推荐

  1. Android 用HorizontalScrollView实现ListView的Item滑动删除 ,滑动错乱 冲突

    用HorizontalScrollView实现类似微信的滑动删除 测试于:Android2.2+ 对于Android来说按键操作已经在减少,越来越多的手势操作层出不穷,今天介绍一款LIstView的I ...

  2. android微信列表滑动删除,Android仿微信对话列表滑动删除效果

    微信对话列表滑动删除效果很不错的,借鉴了github上SwipeListView(项目地址:https://github.com/likebamboo/SwipeListView),在其上进行了一些重 ...

  3. Android 用HorizontalScrollView实现ListView的Item滑动删除

    原理: 利用HorizontalScrollView可以横向滚动的特点实现滑动,根据动态的设置要展示的区域宽度,使得其余选项操作被挤出屏幕外面,从而实现单条滑动菜单的样式. 实现步骤: 实现Listv ...

  4. 高仿微信对话列表滑动删除效果

    前言 用过微信的都知道.微信对话列表滑动删除效果是非常不错的,这个效果我们也能够有. 思路事实上非常easy,弄个ListView.然后里面的每一个item做成一个能够滑动的自己定义控件就可以.由于L ...

  5. Android开发之无bug滑动删除源码(非第三方库)

    Android开发之无bug滑动删除源码(非第三方库源码请在最后面自行下载) 1.我们先来看下效果图:上边是抽取出来的demo,下边是公司用到的项目 2.我们来看下如何调用(我们这里以listView ...

  6. Android透明到白色滑动渐变,Android中Toolbar随着ScrollView滑动透明度渐变效果实现...

    Android中Toolbar随着ScrollView滑动透明度渐变效果实现 一.思路:监听ScrollView的滑动事件 不断的修改Toolbar的透明度 二.注意 1.ScrollView 6.0 ...

  7. Android中View转换为Bitmap及getDrawingCache=null的解决方法

    Android中View转换为Bitmap及getDrawingCache=null的解决方法 参考文章: (1)Android中View转换为Bitmap及getDrawingCache=null的 ...

  8. Android Studio中虚拟机显示比例不正确(已解决)

    Android Studio中虚拟机显示比例不正确(已解决) 最近因为要写课设下载了Android Studio,因为第一次使用这个软件,下载完成之后初次使用出现了很多问题,比如我建立一个项目下载好虚 ...

  9. PPT保存pps演示文档时,在另一个电脑中字体显示不正常!(已解决)

    PPT保存pps演示文档时,在另一个电脑中字体显示不正常!(已解决)

  10. ListView滑动删除效果实现

    通过继承ListView然后结合PopupWindow实现 首先是布局文件: delete_btn.xml:这里只需要一个Button <?xml version="1.0" ...

最新文章

  1. NAT,Easy IP
  2. UVA 1593 Alignment of Code
  3. STC89C52单片机 使用定时器使LED灯闪烁
  4. 【html+css练习】小白使用html+css模拟音乐播放器构造了网页音乐播放器--1
  5. 美国计算机科学和计算机工程专业的好大学,2021USNews美国计算机工程专业排名一览表...
  6. android获得一个view的高度,Android ViewTreeObserver使用总结及获得View高度的几种方法...
  7. zstack 第一个例子
  8. python 动态规划_DP动态规划(Python实现)
  9. 使用XPO过程中的代码优化
  10. javasript深度拷贝
  11. SSH项目搭建-02-配置文件
  12. 【eoeAndroid索引】史上最牛最全android开发知识汇总
  13. Https网络安全传输详解
  14. 35枚不同风格的设计师个人网站欣赏
  15. NUCLEO L476RG学习笔记(六)定时器中断
  16. Visio画拓扑图随记
  17. 幻方解法之horse法生成奇阶幻方
  18. 苹果iOS App上架流程,非iOS开发人员上架教程
  19. 计算机查找是什么意思,计算机的字长是什么意思?怎么查找一台计算机上的字长啊?...
  20. 手机内部储存的绝对地址

热门文章

  1. “刑不上大夫,礼不下庶人”真实意思是什么
  2. UNBUNTU下与VirtualBox的WINDOWS共享文件夹
  3. css img 适配尺寸_一次解决你的图像尺寸和定位问题
  4. matlab 一维 fft,matlab - 一维信号的频谱分析(FFT等) - 堆栈内存溢出
  5. 012-JDK可视化监控工具-jstack
  6. Linux 内核进程管理之进程ID【转】
  7. Compile warning: Embedded binary's NSExtensionActivationRule is TRUEPREDICATE
  8. Python引力波火了 你该了解的开源框架
  9. Google发布MobileNets,一种预训练的高效Tensorflow计算机视觉模型
  10. 《DNS与BIND(第5版)》——10.12 系统优化