android ListView 滑动删除Item的代码分析
来源:互联网 发布:凡茜卸妆油怎么样知乎 编辑:程序博客网 时间:2024/05/18 02:09
这事滑动删除的效果图:
下面主要贴出 ListView Adapter 中的核心代码:
@Override
public View getView(int arg0, View item, ViewGroup parent) {
// TODO Auto-generated method stub
Holder holder = null;
if (item == null) {
holder = new Holder();
item = mInflater.inflate(R.layout.cammicate_item, null);
holder.imglogoTV = (ImageView) item.findViewById(R.id.logo);
holder.nameTV = (TextView) item.findViewById(R.id.nameTV);
holder.timeTV = (TextView) item.findViewById(R.id.timeTV);
holder.lastMsgTV = (TextView) item.findViewById(R.id.contentTV);
holder.msgCountTV = (TextView) item.findViewById(R.id.msg);
holder.delBtn=(Button)item.findViewById(R.id.delBtn);
item.setTag(holder);
} else {
holder = (Holder) item.getTag();
}
//将 当前item的 position arg0参数设置为删除按钮的 tag
holder.delBtn.setTag(arg0);
final Button bt_delete=(Button)holder.delBtn;
item.setOnTouchListener(new OnTouchListener() {
int downX=0,upX=0;
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
switch (event.getAction())// 根据动作来执行代码
{
case MotionEvent.ACTION_MOVE:// 滑动
break;
case MotionEvent.ACTION_DOWN:// 按下
v.setPressed(true);// item的点击效果
downX = (int)event.getX();
break;
case MotionEvent.ACTION_UP:// 松开
v.setPressed(false);// item的点击效果
upX = (int)event.getX();
if (upX-downX>=50&&bt_delete.getVisibility()==View.VISIBLE) { //右滑
bt_delete.setVisibility(View.GONE);
bt_delete.setClickable(false);
return true;
}
else if(upX-downX<=-50) //左滑,显示删除按钮
{
bt_delete.setVisibility(View.VISIBLE);
bt_delete.setClickable(true);
bt_delete.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
v.setVisibility(View.GONE);
v.setClickable(false);
Message msg=new Message();
msg.what=MainActivity.MSG_WHAT_DEL_CHAT;
//将删除item的位置 从 删除按钮的 tag中获取到,并作为handler的 obj对象,发送到UI线程中去 删除需要删除的item,
//删除成功后,需要通知adapter刷新自己
msg.obj=bt_delete.getTag();
mHandler.sendMessage(msg);
}
});
return true;
}
else
{
bt_delete.setClickable(false);
}
// 因为 删除按钮 提前响应了listView的 onItemClick事件,如果用户没有进行删除操作,当用户点击item的时候,需要需用
//performItemClick 事件来响应 item的 点击事件
listView.performItemClick(v,Integer.parseInt(bt_delete.getTag().toString()),
listView.getItemIdAtPosition(Integer.parseInt(bt_delete.getTag().toString())));
return false;
default:
break;
}
return true;
}
});
return item;
}
public class Holder {
public ImageView imglogoTV;
public TextView nameTV;
public TextView timeTV;
public TextView lastMsgTV;
public TextView msgCountTV;
public Button delBtn;
}
代码说明:
(1) 蓝色背景标注的代码为重难点代码
(2) 可能出现的bug: 第一次删除某一项成功,接着删除该item后面的意向程序会崩掉;
造成错误的原因: arg0 变量被你设置为final类型的;你删除成功后,list 减少了一项,但是你的view 中的pos值并未动态的改变;
第一处蓝色背景文字的代码可以解决(2)描述的bug
- android ListView 滑动删除Item的代码分析
- 滑动删除ListView的Item
- listView 的item滑动删除
- Android 用HorizontalScrollView实现ListView的Item滑动删除
- Android开发--自定义控件实现listview的滑动删除item
- android listview滑动删除,实现item的点击缩回
- Android 用HorizontalScrollView实现ListView的Item滑动删除
- android ListView横向滑动删除Item
- android 实现Listview左右滑动删除Item
- android listview item 左右滑动删除
- 滑动删除ListView的Item的效果
- ListView的Item的滑动删除
- 自定义滑动删除item的ListView。
- 简单的listview item滑动删除
- listview滑动删除item的一个方案
- listView的item向左滑动实现删除
- Android 用HorizontalScrollView实现ListView的Item滑动删除 ,滑动错乱 冲突
- androd ListView滑动删除 效果的代码分析
- 编程精粹--编写高质量C语言代码(5):为子系统设防(二)
- 使用接插件需要注意的问题
- UVA 10968 - KuPellaKeS(BFS)
- pat 1057. Stack (30) 浙江大学复试上机最后一题
- 第三方苹果开发库之ASIHTTPRequest
- android ListView 滑动删除Item的代码分析
- Beyond bags of features: Spatial Pyramid Matching 文章的笔记
- 最简单的android开发环境的搭建
- asp.net “非静态字段、方法或属性’System.Web.UI.Page.Response.get‘要求对象引用”
- Design the city - ZOJ 3195 LCA
- USRP2 FPGA debugging
- Java基础视频教程-交通灯管理系统
- sdutoj1500 Message Flood
- How far away ? - HDU 2586 LCA 或水题