Android ListView实现单击item出现删除按钮以及滑动出现删除按钮

我自己一个人弄的公司的产品客户端,所以还是想记录下来以免忘记或者丢失...

在我的上一篇博文(点击打开链接)是一个文件管理的东西,基础组件也是ListView所以在此只是改动一下而已。

单击:

点击出现按钮比较简单只需要替换上文中file_row.xml的checkbox为button就可以,然后自己实现onclicklistener就行了,唯一要注意的就是要在xml文件中的button的android:clickable属性设置为true就可以了。

滑动:

滑动来说也相对比较简单需要在上文种FileAdapter.java类中getView方法里的convertView参数对象设置ontouchlistener就可以了,具体看代码:

 

[java] view plaincopy
 
  1. @Override  
  2.     public View getView(int position,View convertView,ViewGroup parent){  
  3.         ViewHolder holder;  
  4.   
  5.         if(convertView == null){  
  6.             convertView = mInflater.inflate(R.layout.filemanage, null);  
  7.             convertView.setOnTouchListener(new OnTouchListener(){  
  8.   
  9.                 @Override  
  10.                 public boolean onTouch(View v, MotionEvent event) {  
  11.                     switch(event.getAction())//根据动作来执行代码     
  12.                     {    
  13.                     case MotionEvent.ACTION_MOVE://滑动     
  14.                         Toast.makeText(context, "move...", Toast.LENGTH_SHORT).show();  
  15.                         break;    
  16.                     case MotionEvent.ACTION_DOWN://按下     
  17.                         Toast.makeText(context, "down...", Toast.LENGTH_SHORT).show();  
  18.                         DownX = event.getX();  
  19.                         break;    
  20.                     case MotionEvent.ACTION_UP://松开     
  21.                         UpX = event.getX();  
  22.                         Toast.makeText(context, "up..." + Math.abs(UpX-DownX), Toast.LENGTH_SHORT).show();  
  23.                         if(Math.abs(UpX-DownX) > 20){  
  24.                             ViewHolder holder = (ViewHolder) v.getTag();  
  25.                             holder.cBox.setVisibility(View.VISIBLE);  
  26.                         }  
  27.                         break;    
  28.                     default:    
  29.                     }    
  30.                     return true;   
  31.                 }  
  32.             });  
  33.             holder = new ViewHolder();  
  34.             VHs.add(holder);  
  35.             holder.text = (TextView) convertView.findViewById(R.id.filetext);  
  36.             holder.text.setTextColor(context.getResources().getColor(R.color.text_color));  
  37.             holder.icon = (ImageView) convertView.findViewById(R.id.fileicon);  
  38.             holder.cBox = (Button) convertView.findViewById(R.id.delete_btn);  
  39.             holder.cBox.setOnClickListener(new OnClickListener(){  
  40.                 public void onClick(View v) {  
  41.                     Toast.makeText(context, "btn click...", Toast.LENGTH_SHORT).show();  
  42.                 }  
  43.             });  
  44.             convertView.setTag(holder);  
  45.         }else{  
  46.             holder = (ViewHolder) convertView.getTag();  
  47.         }  
  48.         File f=new File(paths.get(position).toString());  
  49.         if(items.get(position).toString().equals("goroot")){  
  50.             holder.text.setText("返回根目录");  
  51.             holder.icon.setImageBitmap(mIcon1);  
  52.             holder.cBox.setVisibility(isVisibility.get(position));  
  53.         }else if(items.get(position).toString().equals("goparent")){  
  54.             holder.text.setText("返回上一级");  
  55.             holder.icon.setImageBitmap(mIcon2);  
  56.             holder.cBox.setVisibility(isVisibility.get(position));  
  57.         }else{  
  58.             holder.text.setText(f.getName());  
  59.             if(f.isDirectory()){  
  60.                 holder.icon.setImageBitmap(mIcon3);  
  61.                 holder.cBox.setVisibility(isVisibility.get(position));  
  62.             }else{  
  63.                 holder.icon.setImageBitmap(mIcon4);  
  64.                 holder.cBox.setVisibility(isVisibility.get(position));  
  65.             }  
  66.         }  
  67.         return convertView;  
  68.     }  


滑动多少距离产生效果自己计算,不过我给的20好像少了点。

 

 

 

///发现listitem 不响应onItemClick;只能在up事件后调用;这是我修改后的代码:
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction())// 根据动作来执行代码
{
case MotionEvent.ACTION_MOVE:// 滑动
break;
case MotionEvent.ACTION_DOWN:// 按下
v.setPressed(true);//item的点击效果
downX = event.getX();
break;
case MotionEvent.ACTION_UP:// 松开
v.setPressed(false);//item的点击效果
upX = event.getX();
if (Math.abs(upX - downX) > 50) {
Button bt_delete = (Button) v.findViewById(R.id.delete);
bt_delete.setVisibility(View.VISIBLE);
return true;
}
//调用onItemClick接口的实现
listView.performItemClick(v, pos, listView.getItemIdAtPosition(pos));
return false;
default:
break;
}
return true;
}

posted @ 2013-12-05 16:07  牧涛  阅读(19470)  评论(0编辑  收藏  举报