android中listview的item滑動刪除效果(已解決listview點擊問題)


領導看到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

 

轉載請注明出處


免責聲明!

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



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