zoukankan      html  css  js  c++  java
  • 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

    转载请注明出处

  • 相关阅读:
    未进入Kali Linux系统修改修改密码的方法
    关于kali linux系统的简单工具
    PowerDesigner根据SQL文件生成PDM数据字典
    Oralce Plsql 中文显示乱码问题无需修改注册表完美解决
    自已写的一个简单图片展示功能,只有前后翻页和旋转
    详解百度地图创建地图、定位、标签、距离、驾车路线、跳动动画的标注代码示例
    div靠右浮动案例
    Struts2 XML配置详解
    log4j输出模板
    log4j日志配置详解
  • 原文地址:https://www.cnblogs.com/ProgramBull/p/3477917.html
Copyright © 2011-2022 走看看