首页 > 代码库 > android ListView中的Item有Button时候点击异常处理

android ListView中的Item有Button时候点击异常处理

1.当ListView中有Button的时候往往会遇到很多问题,比较常见的一个问题是:

  假设:在ListView中有N个Item当点击其中某个Item中的Button的时候,需要改变当前Button的状态,在你点击以后确实最后一个Item的Button的状态改变了,不管点击哪一个Button都是最后一个

 Item的中的Button的状态被改变了,这里涉及到ListView重绘的问题。

  要解决上面的问题的方法是将点击的监听事件提出来进行封装,在用就可以解决上述问题了。

给个示例代码:

在ListView的自定义Adapter的getView方法中:

MianActivity自定义Adapter中

 1 @Override 2         public View getView(int position, View convertView, ViewGroup parent) { 3  4             System.out.println("getViewgetViewgetViewgetViewgetView"); 5             if (convertView == null) { 6                 viewHolder = new ViewHolder(); 7                 convertView = LayoutInflater.from(context).inflate( 8                         R.layout.item, null); 9                 viewHolder.left = (Button) convertView10                         .findViewById(R.id.btn_left);11                 viewHolder.right = (Button) convertView12                         .findViewById(R.id.btn_right);13                 mOnClickListener = MyOnClickListener.instance();14                 mOnClickListener.setContext(MainActivity.this);15                 viewHolder.left.setOnClickListener(mOnClickListener);16                 convertView.setTag(viewHolder);17             } else {18                 viewHolder = (ViewHolder) convertView.getTag();19             }20 21             return convertView;22         }

viewHolder.left这个Button的点击事件封装一下就可以消除上述问题了

MyOnClickListenter:

 1 public class MyOnClickListener implements OnClickListener { 2  3     private static MyOnClickListener mOnClickListener; 4  5     private Button btn; 6  7     private Context context; 8  9     public static MyOnClickListener instance() {10         if (mOnClickListener == null) {11             mOnClickListener = new MyOnClickListener();12         }13 14         return mOnClickListener;15     }16 17     public void setContext(Context context) {18         this.context = context;19 20     }21 22     @Override23     public void onClick(View v) {24         btn = (Button) v;25         final EditText edtextView = new EditText(context);26         new AlertDialog.Builder(context).setTitle("请输入密码").setView(edtextView)27                 .setPositiveButton("确定", new AlertDialog.OnClickListener() {28 29                     @Override30                     public void onClick(DialogInterface dialog, int which) {31                         System.out32                                 .println("setPositiveButtonsetPositiveButtonsetPositiveButton");33                         String passwaord = edtextView.getText().toString()34                                 .trim();35                         System.out.println("获取到的密码是多少-->>" + passwaord);36                         if (passwaord.equals("123")) {37                             System.out38                                     .println("执行了123132123132123132132131313");39                             btn.setText("关闭中");40                             btn.setBackgroundResource(R.drawable.toggle_bg_on);41                         }42 43                     }44                 }).create().show();45 46     }47 48 }

示例代码下载

android ListView中的Item有Button时候点击异常处理