首页 > 代码库 > 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时候点击异常处理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。