android ListView中的Item有Button时候点击异常处理
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时候点击异常处理的更多相关文章
- Android处理ListView中的Item中的Button按钮不能点击的问题
问题描述:ListView列表中的Button按钮按钮不能点击 解决办法:在ListView中的Item项的布局文件中加上:android:descendantFocusability="b ...
- android listview中item通过viewpager实现《IT蓝豹》
android listview中item通过viewpager实现 android listview中item通过viewpager实现,每一个item都支持viewpager实现图片切换功能.本项 ...
- 区分listview的item和Button的点击事件
这两天修改领导通的ListView widget,在ListView中加入Button这类的有 “点击” 事件的widget,发现原来listview的itemclick居然失效了, 后来在网上查资料 ...
- Android ListView 中的checkbox
Q:ListView + CheckBox 当上下滚动的时候有事会自动选中或取消 A:这个与ListView的缓存机制有关.当你屏幕滚动后,ListView中的item选项视图先检查缓存中是否有视图, ...
- Android ListView中按钮监听器设置的解决方案
在做安卓应用开发的时候很经常会用到ListView,并且每一个Item里面都会有按钮之类的需要进行事件监听的控件.在给按钮添加OnClickListener的时候,一开始很下意识的会想在ListVie ...
- android ListView的上部下拉刷新下部点击加载更多具体实现及拓展
android ListView的上部下拉刷新下部点击加载更多具体实现及拓展 ListView下拉刷新,上拉自动加载更多 下拉刷新以及加载更多
- Android ListView中Item点击事件失效解决方案
欢迎关注公众号,每天推送Android技术文章,二维码如下:(可扫描) 在平常的开发过程中,我们的ListView可能不只是简单的显示下文本或者按钮,更多的是显示复杂的布局,这样的话,我们就得自己写布 ...
- Android Listview中Button按钮点击事件冲突解决办法
今天做项目时,ListView中含有了Button组件,心里一早就知道肯定会有冲突,因为以前就遇到过,并解决过,可惜当时没有记录下来. 今天在做的时候,继续被这个问题郁闷了一把,后来解决后,赶紧来记录 ...
- android ListView中button点击事件盖掉onItemClick解决办法
ListView 1.在android应用当中,很多时候都要用到listView,但如果ListView当中添加Button后,ListView 自己的 public void onItemClick ...
随机推荐
- ecshop 改变sitemap.xml的位置
大家知道ECSHOP默认的sitemap.xml文件是放置在data文件夹中的,但是这不利于GOOGLE的抓取.我们必须把sitemap.xml文件放置在根目录下 在admin/sitemap.php ...
- 【英语】Bingo口语笔记(54) - how to date a foreigner
- 【解题报告】zju-1030 Farmland
原题地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=30 题目大意: 平面图有一些点和一条边,要求找这样的多边形: 1.边的 ...
- LCS nlog(n) 但最坏情况还是比较悲剧 转载的文章;
最长公共子序列问题: 给定2个字符串,求其最长公共子串.如abcde和dbada的最长公共字串为bd. 动态规划:dp[i][j]表示A串前i个和B串前j个的最长公共子串的长度. 则 若A[i] == ...
- 锋利的jQuery读书笔记---jQuery中Ajax--序列化元素、Ajax全局事件
serialize()方法: 作用于一个jQuery对象,它能够将DOM元素内容序列化为字符串,用于Ajax请求. <!DOCTYPE html> <html> <hea ...
- 简单的聊天程序,主要用到的是Socket
服务端: import java.io.*; import java.net.*; import java.util.*; public class ChatServer { boolean stat ...
- Android SDK更新 Connection to http://dl-ssl.google.com refused 解决方法
问题描述 使用SDK Manager更新时出现问题Failed to fetch URL https://dl-ssl.google.com/android/repository/repository ...
- Dev gridControl z
Dev gridControl 添加表标题 1.OptionsView ->ShowViewCaption = True 2.ViewCaption = "标题" Dev g ...
- js中document.all 的用法
1. document.all是什么? document.all 实质就是文档中所有元素的集合.可以看做一个数组. 2.document.all怎么用? 2.1 根据下标取元素. 语法: docu ...
- JAVA & Android 系统环境变量配置
Java JAVA_HOME:C:\Program Files\Java\jdk1.7.0_40 CLASSPATH:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\ ...