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 }

示例代码下载

时间: 2024-10-04 02:38:51

android ListView中的Item有Button时候点击异常处理的相关文章

Android listview中使用button解决方法

其实很多东西不是粘贴代码就能解决的,做任何事都要用心做,这样才能晚上睡觉睡得比较踏实. 当你粘贴别人的代码,有时候出bug真的很烦,可是当你明白点原理的时候,能看出问题的实质,解决起来也很得心应手,开始今天的主题.当你的看到这个问题时,你应该知道问题出在哪里了,在listview中使用button(当然不只是button,还有imagebutton等自身响应点击的view),问题出现了,你会发现listview中的item不能点击了,具体是因为什么呢?大多数原因是抢焦点,button抢占了ite

android listview中item通过viewpager实现

android listview中item通过viewpager实现 android listview中item通过viewpager实现,每一个item都支持viewpager实现图片切换功能.本项目主要介绍多个viewpager加载图片和listview 上下滑动不卡顿问题.本项目由作者Flyco分享的分享地址:https://github.com/H07000223/FlycoBanner_Master.本项目找对应id封装一个ViewFindUtils类,通过如下代码找id    /**

Android动态加载ListView中的Item

我这周上网看到动态增加listview的每一项item的布局,今天抽空自己写了一个,方便自己日后使用,这个效果还是很不错的,用到了Adapter的notifyDataSetChanged()方法,当点击每一个Item的时候,就通知adapter更新getView,系统得到通知就相应的加载一遍布局,就达到了动态加载item布局的效果.希望给大家带来点启迪,有问题或想要代码的可以留言,欢迎大家留言谈论listview的一些知识,以求共同进步,转载请标明出处: http://blog.csdn.net

区分listview的item和Button的点击事件

这两天修改领导通的ListView widget,在ListView中加入Button这类的有 “点击” 事件的widget,发现原来listview的itemclick居然失效了, 后来在网上查资料终于得以解决. ListView 和 其它能触发点击事件的widget无法一起正常工作的原因是加入其它widget后,ListView的itemclick事件将无法触发,被其它widget的click事件屏蔽. 解决办法: 在item中,包含button的item的Layout中加入属性 andro

android ListView中CheckBox错位的解决

貌似已经很晚了,但是还是想记下笔记,想让今天完满. 在ListView中加了checkBox,可是发现点击改变其选中状态的时候,发现其位置错乱.状态改变的并不是你选中的,百思不得其解.后面通过上网查资料,可是个说纷纭,但是我还是找到了解决办法. 在自定义的适配器中,对checkBox的设置如下: 记住两者的顺序,先对checkBox进行事件监听,再设置其状态.前提在布局中对checkBox的状态设为false. android ListView中CheckBox错位的解决,布布扣,bubuko.

给Android ListView添加删除item动画

给Android ListView添加删除item动画 给listview删除一个item的时候加上一个折叠动画,感觉效果会好一点. 步骤是当删除一个view,先用动画把view的高度改变,看上去就是折叠的效果.当动画完成的时候,再真正把item移除. private void deletePattern(final View view, final int position) { Animation.AnimationListener al = new Animation.AnimationL

[转][Android] ListView中getView的原理+如何在ListView中放置多个item

ListView 和 Adapter 的基础 工作原理: ListView 针对List中每个item,要求 adapter “给我一个视图” (getView). 一个新的视图被返回并显示 如果我们有上亿个项目要显示怎么办?为每个项目创建一个新视图?NO!这不可能! 实际上Android为你缓存了视图. Android中有个叫做Recycler的构件,下图是他的工作原理: 如果你有10亿个项目(item),其中只有可见的项目存在内存中,其他的在Recycler中. ListView先请求一个t

基于“ViewHolder”技术提升Android ListView中Item View加载效率

对于提升Android中频繁使用的ListView子Item View的加载效率,基于两点基本考虑: 1,Android的View的创建比较消耗资源: 2,findViewById()也不是最快的. 所以在实际开发中经常使用的适配器中的getView()方法: public View getView(int position, View convertView, ViewGroup parent); 如果每次都在里面创建一个新View出来,将导致效率低下,比较高效率的做法是每次判断convert

Android ListView 中的onItemClick方法中Intent 无法跳转的解决方案

I found this somewhere after googling There will be case that your custom list item doesn’t respond when you click…so what’s the reason and what’s the solution? Here several problems and solutions: 1. Scenario: list item layout contains CheckBox Prob