Android ListView實現單擊item出現刪除按鈕以及滑動出現刪除按鈕


我自己一個人弄的公司的產品客戶端,所以還是想記錄下來以免忘記或者丟失...

在我的上一篇博文(點擊打開鏈接)是一個文件管理的東西,基礎組件也是ListView所以在此只是改動一下而已。

單擊:

點擊出現按鈕比較簡單只需要替換上文中file_row.xml的checkbox為button就可以,然后自己實現onclicklistener就行了,唯一要注意的就是要在xml文件中的button的android:clickable屬性設置為true就可以了。

滑動:

滑動來說也相對比較簡單需要在上文種FileAdapter.java類中getView方法里的convertView參數對象設置ontouchlistener就可以了,具體看代碼:

 

[java]  view plain copy
 
  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;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM