android中listview的item滑动删除效果(已解决listview点击问题)
领导看到iphone上tableview有个滑动删除的效果,要求在android上也实现,搜了下资料,实现起来比较简单,可弄到后面,居然不能点击了,把一篇文章中的代码修改了一下,捣鼓了一番,搞定,下面是代码:
package com.example.listsildedel; import java.util.ArrayList;
import java.util.List; import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.ListView; public class MainActivity extends Activity { private ListView mListView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = (ListView) this.findViewById(R.id.list);
List<String> list = new ArrayList<String>();
for(int i=0;i<10;i++){
list.add("选项"+i);
}
//实例化自定义内容适配类
MyAdapter adapter = new MyAdapter(this, this,list);
//为listView设置适配
mListView.setAdapter(adapter);
} public void openActivity(){
Intent intent = new Intent(this, TestActivity.class);
startActivity(intent);
} }
adapter:
package com.example.listsildedel; import java.util.List; import android.content.Context;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.TextView; public class MyAdapter extends BaseAdapter { private List<String> arrays = null;
private Context mContext;
private Button curDel_btn;
private float x,ux;
private MainActivity mActivity; public MyAdapter(MainActivity activity, Context mContext, List<String> arrays) {
this.mContext = mContext;
this.arrays = arrays;
mActivity = activity; } public int getCount() {
return this.arrays.size();
} public Object getItem(int position) {
return null;
} public long getItemId(int position) {
return position;
} public View getView(final int position, View view, ViewGroup arg2) {
ViewHolder viewHolder = null;
if (view == null) {
viewHolder = new ViewHolder();
view = LayoutInflater.from(mContext).inflate(R.layout.item, null);
viewHolder.tvTitle = (TextView) view.findViewById(R.id.title);
viewHolder.btnDel = (Button) view.findViewById(R.id.del);
view.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) view.getTag();
}
//换掉了原来listview中的onItemClick
<span style="font-size:18px;"><strong>view.setOnClickListener(new OnClickListener() { public void onClick(View v) {
// TODO Auto-generated method stub
mActivity.openActivity();
}
});</strong></span> //为每一个view项设置触控监听
view.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) { final ViewHolder holder = (ViewHolder) v.getTag(); //当按下时处理
if (event.getAction() == MotionEvent.ACTION_DOWN) { // //设置背景为选中状态
// v.setBackgroundResource(R.drawable.mm_listitem_pressed);
//获取按下时的x轴坐标
x = event.getX();
//判断之前是否出现了删除按钮如果存在就隐藏
if (curDel_btn != null) {
if(curDel_btn.getVisibility() == View.VISIBLE){
curDel_btn.setVisibility(View.GONE);
return true;
}
} } else if (event.getAction() == MotionEvent.ACTION_UP) {// 松开处理 //设置背景为未选中正常状态
//v.setBackgroundResource(R.drawable.mm_listitem_simple);
//获取松开时的x坐标
ux = event.getX(); //判断当前项中按钮控件不为空时
if (holder.btnDel != null) { //按下和松开绝对值差当大于20时显示删除按钮,否则不显示 if (Math.abs(x - ux) > 20) {
holder.btnDel.setVisibility(View.VISIBLE);
curDel_btn = holder.btnDel;
return true;
}
}
} else if (event.getAction() == MotionEvent.ACTION_MOVE) {//当滑动时背景为选中状态
return true;
//v.setBackgroundResource(R.drawable.mm_listitem_pressed); } else {//其他模式
//设置背景为未选中正常状态
//v.setBackgroundResource(R.drawable.mm_listitem_simple); } return false;
}
});
viewHolder.tvTitle.setText(this.arrays.get(position)); //为删除按钮添加监听事件,实现点击删除按钮时删除该项
viewHolder.btnDel.setOnClickListener(new OnClickListener() { public void onClick(View v) {
if(curDel_btn!=null)
curDel_btn.setVisibility(View.GONE);
arrays.remove(position);
notifyDataSetChanged(); }
});
return view; } final static class ViewHolder {
TextView tvTitle;
Button btnDel;
}
}
代码下载: http://download.csdn.net/detail/wulingbo2005/6691885
转载请注明出处
android中listview的item滑动删除效果(已解决listview点击问题)的更多相关文章
- Android 用HorizontalScrollView实现ListView的Item滑动删除 ,滑动错乱 冲突
用HorizontalScrollView实现类似微信的滑动删除 测试于:Android2.2+ 对于Android来说按键操作已经在减少,越来越多的手势操作层出不穷,今天介绍一款LIstView的I ...
- 【转】Android 实现ListView的滑动删除效果
http://www.cnblogs.com/weixiao870428/p/3524055.html http://download.csdn.net/download/love_javc_you/ ...
- Android 高级UI设计笔记03:使用ListView实现左右滑动删除Item
1. 这里就是实现一个很简单的功能,使用ListView实现左右滑动删除Item: (1)当我们在ListView的某个Item,向左滑动显示一个删除按钮,用户点击按钮,即可以删除该项item,并且有 ...
- 微信小程序实现滑动删除效果
在一些app中,随处可见左滑动的效果,在微信小程序中,官方并未提供相关组件,需要我们自己动手写一个类似的效果 下面仅列举出核心代码,具体的优化需要根据你自身的需求 <view class='li ...
- 原生H5页面模拟APP左侧滑动删除效果
话不多说,往左侧滑动,显示删除,我们先来看一下效果图:如下: 这个布局我就不多说,反正就是一行ul,li, class名“item” js代码如下: $(".item").on(& ...
- ListView的item中有button和checkbox,listview的点击事件无效
ListView的item中有button和checkbox,listview的点击事件无效,解决办法: 在item布局文件中的根控件中添加属性设置: android:descendantFocusa ...
- spirng中的asm与jdk不兼容<已解决>
转载自:spirng中的asm与jdk不兼容<已解决> 前言 不知道前面对eclipse做了什么,使用maven来创建项目,然后转成web,启动的时候一直报错.我弄了好久,还是无法解决,先 ...
- Windows平台下在Emacs中使用plantuml中文乱码问题(已解决)
Windows平台下在Emacs中使用plantuml中文乱码问题(已解决) */--> code {color: #FF0000} pre.src {background-color: #00 ...
- ListView滑动删除效果实现
通过继承ListView然后结合PopupWindow实现 首先是布局文件: delete_btn.xml:这里只需要一个Button <?xml version="1.0" ...
随机推荐
- 为一张PCI卡打通经络的过程
一张PCI卡通过“一转二”的转接卡插在主板上,probe调用失败,日志显示读取配置空间的时候发生了奇偶校验错误,可是使用相同的转接卡把它插在另外一台相同机器的主板上时,却运行正常,这就说明不是转接卡的 ...
- js获取浏览器类型
function add(){ var userAgent = navigator.userAgent, rMsie = /(msie\s|trident.*rv:)([\w.]+)/, rFiref ...
- careercup-排序和查找 11.2
11.2 编写一个方法,对字符串数组进行排序,将所有变位词1排在相邻的位置. 类似leetcode:Anagrams 解法: 变位词:由变换某个词或短语的字母顺序构成的新的词或短语.例如,“trian ...
- careercup-数学与概率 7.7
7.7 有些数的素因子只有3.5.7,请设计一个算法,找出其中第k个数. 解法: 首先,我们可以将满足条件的前几个数列出来,以此寻找解题思路. 一种简单的思路就是对于已经列出的数,我们依次去乘以3,5 ...
- cocos2dx下最大纹理大小取决于平台
原文:http://www.cocos2d-x.org/wiki/Max_size_of_textures_in_cocos2d-x_depends_on_each_platform 在理论上,coc ...
- Java synchronized 总结
在Java开发的时候经常会用到关键字synchronized来对代码进行同步,在使用的过程中,对于synchronized确不是很熟悉,最近在看Spring源码时,发现有不少地方都用到同步,因此,趁此 ...
- android使用模拟机测试时,若要联网IP地址该怎么写?
android使用模拟机测试时,如果服务器也是本机,那么IP地址如果写为localhost或者127.0.0.1,这样其实是不能访问到本机上部署的服务端,那么该怎么写呢?很简单,把IP地址改为10.0 ...
- 通过虚拟机VMware来练习安装ESXi
关于VMware vSphere组件ESXi,大家请自行百度.大概的意思我简单的先理解为这个组件是通过在服务器上安装上ESXi系统,继而虚拟化整个服务器的硬件资源为之后虚拟各种客户端所用.相比较大家较 ...
- MyBatis自动获取主键,MyBatis使用Oracle返回主键,Oracle获取主键
MyBatis自动获取主键,MyBatis使用Oracle返回主键,Oracle获取主键 >>>>>>>>>>>>>> ...
- php之数据类型自动转换
1:概述 ---php是一种弱类型的语言,它可以根据运行环境的变化而自动进行数据类型的转换 1.1转换成布尔类型的原则 以下值都将转换成布尔类型中的false: A.布尔类型的false; B.空字符 ...