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

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

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

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

给个示例代码:

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

aaarticlea/png;base64,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" alt="" />

MianActivity自定义Adapter中

 @Override
public View getView(int position, View convertView, ViewGroup parent) { System.out.println("getViewgetViewgetViewgetViewgetView");
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = LayoutInflater.from(context).inflate(
R.layout.item, null);
viewHolder.left = (Button) convertView
.findViewById(R.id.btn_left);
viewHolder.right = (Button) convertView
.findViewById(R.id.btn_right);
mOnClickListener = MyOnClickListener.instance();
mOnClickListener.setContext(MainActivity.this);
viewHolder.left.setOnClickListener(mOnClickListener);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
} return convertView;
}

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

MyOnClickListenter:

 public class MyOnClickListener implements OnClickListener {

     private static MyOnClickListener mOnClickListener;

     private Button btn;

     private Context context;

     public static MyOnClickListener instance() {
if (mOnClickListener == null) {
mOnClickListener = new MyOnClickListener();
} return mOnClickListener;
} public void setContext(Context context) {
this.context = context; } @Override
public void onClick(View v) {
btn = (Button) v;
final EditText edtextView = new EditText(context);
new AlertDialog.Builder(context).setTitle("请输入密码").setView(edtextView)
.setPositiveButton("确定", new AlertDialog.OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
System.out
.println("setPositiveButtonsetPositiveButtonsetPositiveButton");
String passwaord = edtextView.getText().toString()
.trim();
System.out.println("获取到的密码是多少-->>" + passwaord);
if (passwaord.equals("123")) {
System.out
.println("执行了123132123132123132132131313");
btn.setText("关闭中");
btn.setBackgroundResource(R.drawable.toggle_bg_on);
} }
}).create().show(); } }

示例代码下载

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

  1. Android处理ListView中的Item中的Button按钮不能点击的问题

    问题描述:ListView列表中的Button按钮按钮不能点击 解决办法:在ListView中的Item项的布局文件中加上:android:descendantFocusability="b ...

  2. android listview中item通过viewpager实现《IT蓝豹》

    android listview中item通过viewpager实现 android listview中item通过viewpager实现,每一个item都支持viewpager实现图片切换功能.本项 ...

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

    这两天修改领导通的ListView widget,在ListView中加入Button这类的有 “点击” 事件的widget,发现原来listview的itemclick居然失效了, 后来在网上查资料 ...

  4. Android ListView 中的checkbox

    Q:ListView + CheckBox 当上下滚动的时候有事会自动选中或取消 A:这个与ListView的缓存机制有关.当你屏幕滚动后,ListView中的item选项视图先检查缓存中是否有视图, ...

  5. Android ListView中按钮监听器设置的解决方案

    在做安卓应用开发的时候很经常会用到ListView,并且每一个Item里面都会有按钮之类的需要进行事件监听的控件.在给按钮添加OnClickListener的时候,一开始很下意识的会想在ListVie ...

  6. android ListView的上部下拉刷新下部点击加载更多具体实现及拓展

    android ListView的上部下拉刷新下部点击加载更多具体实现及拓展 ListView下拉刷新,上拉自动加载更多 下拉刷新以及加载更多

  7. Android ListView中Item点击事件失效解决方案

    欢迎关注公众号,每天推送Android技术文章,二维码如下:(可扫描) 在平常的开发过程中,我们的ListView可能不只是简单的显示下文本或者按钮,更多的是显示复杂的布局,这样的话,我们就得自己写布 ...

  8. Android Listview中Button按钮点击事件冲突解决办法

    今天做项目时,ListView中含有了Button组件,心里一早就知道肯定会有冲突,因为以前就遇到过,并解决过,可惜当时没有记录下来. 今天在做的时候,继续被这个问题郁闷了一把,后来解决后,赶紧来记录 ...

  9. android ListView中button点击事件盖掉onItemClick解决办法

    ListView 1.在android应用当中,很多时候都要用到listView,但如果ListView当中添加Button后,ListView 自己的 public void onItemClick ...

随机推荐

  1. Session的获得方式

    在hibernate.cfg.xml中添加这个属性,来开启currentSession的使用<property name= "hibernate.current_session_con ...

  2. Hibernate-Criteria Queries

    1.实例 接口org.hibernate.Criteria针对特殊持久层类进行查询,Sesion是Criteria的工厂: Criteria crit = sess.createCriteria(Ca ...

  3. 【转】Eclipse常用快捷键

    原文网址:http://denver.blog.51cto.com/272871/52219 编辑相关快捷键 1.[Alt+/] 为用户提供内容的辅助. 2.[Ctrl+O] 显示类中方法和属性的大纲 ...

  4. linux echo命令的-n、-e两个参数

    echo -n 不换行输出 $echo -n "123" $echo "456" 最终输出 123456 而不是 123 456 echo -e 处理特殊字符 ...

  5. php在apache中一共有三种工作方式:CGI模式、FastCGI模式、Apache 模块DLL

    php在apache中一共有三种工作方式:CGI模式.FastCGI .FastCGI是什么? FastCGI是语言无关的.可伸缩架构的CGI开放扩展,其主要行 为是将CGI解释器进程保持在内存中并因 ...

  6. ASIFormDataRequest 登录

    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL: [NSURL URLWithString: @"http: ...

  7. wc命令--Linux统计文件行数

    语法:wc [选项] 文件… 说明:该命令统计给定文件中的字节数.字数.行数.如果没有给出文件名,则从标准输入读取.wc同时也给出所有指定文件的总统计数.字是由空格字符区分开的最大字符串. 该命令各选 ...

  8. TextView------文字底部或者中间加横线

    promotionLinkText = (TextView) this .findViewById(R.id. text_promotion_link ); 中间加横线 promotionLinkTe ...

  9. ansible网络模块安装httplib2

    ansible网络模块安装httplib2 在进行使用ansible的网络模块的时候,需要安装httplib2模块 下载地址: https://pypi.python.org/pypi?%3Aacti ...

  10. 在 Asp.NET MVC 中使用 SignalR 实现推送功能

    一,简介Signal 是微软支持的一个运行在 Dot NET 平台上的 html websocket 框架.它出现的主要目的是实现服务器主动推送(Push)消息到客户端页面,这样客户端就不必重新发送请 ...