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) convertView
10                         .findViewById(R.id.btn_left);
11                 viewHolder.right = (Button) convertView
12                         .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     @Override
23     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                     @Override
30                     public void onClick(DialogInterface dialog, int which) {
31                         System.out
32                                 .println("setPositiveButtonsetPositiveButtonsetPositiveButton");
33                         String passwaord = edtextView.getText().toString()
34                                 .trim();
35                         System.out.println("获取到的密码是多少-->>" + passwaord);
36                         if (passwaord.equals("123")) {
37                             System.out
38                                     .println("执行了123132123132123132132131313");
39                             btn.setText("关闭中");
40                             btn.setBackgroundResource(R.drawable.toggle_bg_on);
41                         }
42 
43                     }
44                 }).create().show();
45 
46     }
47 
48 }

示例代码下载

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。