android listview 中button 冲突问题,不同情况不同解决方案
2014-05-13 11:51
323 查看
主题:
Listview与button共同 存在事件?
继承自BaseAdapter的:(有button事件)
public ViewgetView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder=newViewHolder();
//可以理解为从vlist获取view 之后把view返回给ListView
convertView = mInflater.inflate(R.layout.vlist,null);
holder.title =(TextView)convertView.findViewById(R.id.sms_list_item_contractid);
holder.info =(TextView)convertView.findViewById(R.id.sms_list_item_receivetime);
holder.viewBtn =(Button)convertView.findViewById(R.id.sms_list_but_sendsms);
convertView.setTag(holder);
}else {
holder =(ViewHolder)convertView.getTag();
}
holder.title.setText((String)mData.get(position).get("title"));
holder.info.setText((String)mData.get(position).get("info"));
holder.viewBtn.setTag(position);
//给Button添加单击事件 添加Button之后ListView将失去焦点 需要的直接把Button的焦点去掉
holder.viewBtn.setOnClickListener(newView.OnClickListener() {
@Override
public voidonClick(View v) {
showInfo(position);
}
});
//holder.viewBtn.setOnClickListener(MyListener(position));
return convertView;
}
继承自SimpleAdapter的:
重写的时候(必须重写getVeiw),必须将列表视图操作全部写在里边。
mData=this.getData();
String[]from={ "title","info"};
int[]to={R.id.sms_list_item_contractid, R.id.sms_list_item_receivetime};
MyAdapter saImageItems_all = new MyAdapter(this,users_all,R.layout.vlist,from,to);
如果不重写,可以不用getView的方法。
mData=this.getData();
String[]from={ "title","info"};
int[]to={R.id.sms_list_item_contractid, R.id.sms_list_item_receivetime};
SimpleAdapter saImageItems_all = newSimpleAdapter(this,users_all,R.layout.sms_listview_item_layout,from,to);
2) 正确理解ViewHolder.
ViewHolder缓存了view中显示数据的子控件,View的每次创建是比较耗时的,因此对于getview方法传入的convertView应充分利用 != null的判断 ,view的findViewById()方法也是比较耗时的,因此需要考虑只调用一次,之后就用View.getTag()方法来获得ViewHolder对象。
引用自:/article/2019189.html
3) 影响listview中button事件的主要问题在哪。
http://www.cnblogs.com/eyu8874521/archive/2012/10/17/2727882.html
主要讲了不同参数设置,在此不多说。
即在Item布局的根布局加上android:descendantFocusability=”blocksDescendants”
方案:可以在重写方法上屏蔽掉button的处理事件。或者不用getView的方法重写。也可以代码不修改,直接在xml文件中修改。
目前只实现了屏蔽掉button事件处理的方法,对于xml方法,
Xml中设置:android:descendantFocusability="blocksDescendants",button事件仍然可以点击,不知道为什么,希望知道的朋友可以分享一下经验。
SampleAdapter可以不用重写getview,处理如下。
public void initDateItemListener(intnum){
mData=this.getData();
String[]from={ "title","info"};
int[]to={R.id.sms_list_item_contractid, R.id.sms_list_item_receivetime};
//MyAdaptersaImageItems_all = new MyAdapter(this,users_all,R.layout.vlist,from,to);
SimpleAdaptersaImageItems_all = new SimpleAdapter(this,users_all,R.layout.vlist,from,to);
lv.setAdapter(saImageItems_all);
//添加点击
lv.setOnItemClickListener(newOnItemClickListener() {
@Override
public voidonItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
showInfoItem(arg2);
}
});
}
2) 只想要里边的button事件,屏蔽掉listview的事件处理。
方法一:可以直接在xml中进行设置,
去掉:android:descendantFocusability="blocksDescendants"
或者改成:android:descendantFocusability="afterDescendants"
方法二:代码修改,不用写item的点击事件,
//添加点击
lv.setOnItemClickListener(newOnItemClickListener() {
@Override
public voidonItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
showInfoItem(arg2);
}
});
也是可以的。
BaseAdapter测试通过。
SimpleAdapter测试通过。
3) 两个都需要
首先,在listview的跟地址设置android:descendantFocusability="blocksDescendants"
然后只要接口在,就可以实现。
BaseAdapter测试通过。
SimpleAdapter测试通过。
Listview与button共同 存在事件?
1 问题描述:
用户需求不同,要的结果也不同。大致有三种情况:1)想要listview的事件。2)想要listview中的button事件。3)想要两个事件都有。2 知识准备:
1) 关于重写listview。BaseAdapter,或者是SimpleAdapter。其中getView方法的正确理解。继承自BaseAdapter的:(有button事件)
public ViewgetView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder=newViewHolder();
//可以理解为从vlist获取view 之后把view返回给ListView
convertView = mInflater.inflate(R.layout.vlist,null);
holder.title =(TextView)convertView.findViewById(R.id.sms_list_item_contractid);
holder.info =(TextView)convertView.findViewById(R.id.sms_list_item_receivetime);
holder.viewBtn =(Button)convertView.findViewById(R.id.sms_list_but_sendsms);
convertView.setTag(holder);
}else {
holder =(ViewHolder)convertView.getTag();
}
holder.title.setText((String)mData.get(position).get("title"));
holder.info.setText((String)mData.get(position).get("info"));
holder.viewBtn.setTag(position);
//给Button添加单击事件 添加Button之后ListView将失去焦点 需要的直接把Button的焦点去掉
holder.viewBtn.setOnClickListener(newView.OnClickListener() {
@Override
public voidonClick(View v) {
showInfo(position);
}
});
//holder.viewBtn.setOnClickListener(MyListener(position));
return convertView;
}
继承自SimpleAdapter的:
重写的时候(必须重写getVeiw),必须将列表视图操作全部写在里边。
mData=this.getData();
String[]from={ "title","info"};
int[]to={R.id.sms_list_item_contractid, R.id.sms_list_item_receivetime};
MyAdapter saImageItems_all = new MyAdapter(this,users_all,R.layout.vlist,from,to);
如果不重写,可以不用getView的方法。
mData=this.getData();
String[]from={ "title","info"};
int[]to={R.id.sms_list_item_contractid, R.id.sms_list_item_receivetime};
SimpleAdapter saImageItems_all = newSimpleAdapter(this,users_all,R.layout.sms_listview_item_layout,from,to);
2) 正确理解ViewHolder.
ViewHolder缓存了view中显示数据的子控件,View的每次创建是比较耗时的,因此对于getview方法传入的convertView应充分利用 != null的判断 ,view的findViewById()方法也是比较耗时的,因此需要考虑只调用一次,之后就用View.getTag()方法来获得ViewHolder对象。
引用自:/article/2019189.html
3) 影响listview中button事件的主要问题在哪。
http://www.cnblogs.com/eyu8874521/archive/2012/10/17/2727882.html
主要讲了不同参数设置,在此不多说。
即在Item布局的根布局加上android:descendantFocusability=”blocksDescendants”
3 不同需求
1) 只想要listview事件,屏蔽掉里边的button事件。方案:可以在重写方法上屏蔽掉button的处理事件。或者不用getView的方法重写。也可以代码不修改,直接在xml文件中修改。
目前只实现了屏蔽掉button事件处理的方法,对于xml方法,
Xml中设置:android:descendantFocusability="blocksDescendants",button事件仍然可以点击,不知道为什么,希望知道的朋友可以分享一下经验。
SampleAdapter可以不用重写getview,处理如下。
public void initDateItemListener(intnum){
mData=this.getData();
String[]from={ "title","info"};
int[]to={R.id.sms_list_item_contractid, R.id.sms_list_item_receivetime};
//MyAdaptersaImageItems_all = new MyAdapter(this,users_all,R.layout.vlist,from,to);
SimpleAdaptersaImageItems_all = new SimpleAdapter(this,users_all,R.layout.vlist,from,to);
lv.setAdapter(saImageItems_all);
//添加点击
lv.setOnItemClickListener(newOnItemClickListener() {
@Override
public voidonItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
showInfoItem(arg2);
}
});
}
2) 只想要里边的button事件,屏蔽掉listview的事件处理。
方法一:可以直接在xml中进行设置,
去掉:android:descendantFocusability="blocksDescendants"
或者改成:android:descendantFocusability="afterDescendants"
方法二:代码修改,不用写item的点击事件,
//添加点击
lv.setOnItemClickListener(newOnItemClickListener() {
@Override
public voidonItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
showInfoItem(arg2);
}
});
也是可以的。
BaseAdapter测试通过。
SimpleAdapter测试通过。
3) 两个都需要
首先,在listview的跟地址设置android:descendantFocusability="blocksDescendants"
然后只要接口在,就可以实现。
BaseAdapter测试通过。
SimpleAdapter测试通过。
4 代码下载地址:
http://download.csdn.net/detail/self_discipline1/7339427相关文章推荐
- Android 解决ListView 和 ScrollView 共存冲突的问题(另一种解决方案)
- Android ListView滑动过程中控件显示重复/错误问题之原理分析及解决方案
- Android中ListView异步加载图片错位、重复、闪烁问题分析及解决方案
- Android ScrollView与ListView,GridView共存冲突解决方案
- Android中自定义ListView无法响应OnItemClickListener中的onItemClick方法问题解决方案
- Android中自定义ListView无法响应OnItemClickListener中的onItemClick方法问题解决方案
- Android ListView异步加载图片乱序问题,原因分析及解决方案
- Android中自定义ListView无法响应OnItemClickListener中的onItemClick方法问题解决方案
- android:descendantFocusability用法简析-ListView与Button、RadioButton焦点冲突问题
- Android ListView异步加载图片乱序问题,原因分析及解决方案
- Android ListView异步加载图片乱序问题,原因分析及解决方案
- Android 关于在ScrollView中加上一个ListView,ListView内容显示不完全(总是显示第一项)的问题的两种简单的解决方案
- Android中ListView异步加载图片错位、重复、闪烁问题分析及解决方案
- Android中ListView异步加载图片错位、重复、闪烁问题分析及解决方案
- Android ListView异步加载图片乱序问题,原因分析及解决方案
- Android 解决ListView 和 ScrollView 共存冲突的问题
- Android项目引用不同library导致多个android-support-v4包冲突问题
- Android中自定义ListView无法响应OnItemClickListener中的onItemClick方法问题解决方案
- android使用GestureDetector实现手势下滑与ListView onTouchEvent 冲突问题 解决
- Android中onClick事件和onTouchEvent事件冲突问题的解决方案