listView的item中含有checkbox的一些问题及解决办法
2016-11-07 09:56
337 查看
问题1
因为checkbox的点击事件优先级高于listview的item点击事件
所以,checkbox点击后,item的事件将不能触发。
、
解决方法:
要想checkbox和item的事件都能触发,只需要在item的跟
布局中添加android:descendantFocusability="blocksDescendants"
问题2
由于baseAdapter里的getview()方法里的convertview参数可以重用item,
导致你选中一个item里的checkbox后,每隔一定长度的item里的checkbox也会显示选中状态
解决方法:
用一个hashmap记录每个item里checkbox的状态,在每次取出item时,自己根据hashmap里的值
初始化checkbox的状态。
//初始化checkbox的状态值
h.checkBox.setChecked(checkBoxState.get(position));
//用一个hashmap记录checkbox的变化值
h.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
checkBoxState.put(position, isChecked);
}
});
问题3
item里含有checkbox并且为它设置了setOnCheckedChangeListener事件,每次调用setChecked()这个方法时,会触发这个事件,而很多
时候调用这个方法时你不想让它触发,所以要先把设个事件设置为null
解决方法:
h.checkBox.setOnCheckedChangeListener(null);
h.checkBox.setChecked(checkBoxState.get(position));
h.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
checkBoxState.put(position, isChecked);
}
});
在初始化checkbox的状态值前,添加h.checkBox.setOnCheckedChangeListener(null);
所以问题2和问题3一般会一起出现,都要一起解决。
public View getView(final int position, View convertView,
ViewGroup parent) {
// TODO Auto-generated method stub
if (convertView == null) {
convertView = getLayoutInflater().from(mainActivity.this)
.inflate(R.layout.itemview, null, false);
h = new hold();
h.nameView = (TextView) convertView
.findViewById(R.id.nameItemTV);
h.noticeButton = (Button) convertView
.findViewById(R.id.ItemnoticeBT);
h.checkBox=(CheckBox) convertView.findViewById(R.id.itemCB);
h.checkBox.setId(position);
// h.editText = (EditText) convertView.findViewById(R.id.itemet);
convertView.setTag(h);
} else {
h = (hold) convertView.getTag();
}
h.checkBox.setOnCheckedChangeListener(null);
h.checkBox.setChecked(checkBoxState.get(position));
h.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
checkBoxState.put(position, isChecked);
}
});
return convertView;
}
因为checkbox的点击事件优先级高于listview的item点击事件
所以,checkbox点击后,item的事件将不能触发。
、
解决方法:
要想checkbox和item的事件都能触发,只需要在item的跟
布局中添加android:descendantFocusability="blocksDescendants"
问题2
由于baseAdapter里的getview()方法里的convertview参数可以重用item,
导致你选中一个item里的checkbox后,每隔一定长度的item里的checkbox也会显示选中状态
解决方法:
用一个hashmap记录每个item里checkbox的状态,在每次取出item时,自己根据hashmap里的值
初始化checkbox的状态。
//初始化checkbox的状态值
h.checkBox.setChecked(checkBoxState.get(position));
//用一个hashmap记录checkbox的变化值
h.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
checkBoxState.put(position, isChecked);
}
});
问题3
item里含有checkbox并且为它设置了setOnCheckedChangeListener事件,每次调用setChecked()这个方法时,会触发这个事件,而很多
时候调用这个方法时你不想让它触发,所以要先把设个事件设置为null
解决方法:
h.checkBox.setOnCheckedChangeListener(null);
h.checkBox.setChecked(checkBoxState.get(position));
h.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
checkBoxState.put(position, isChecked);
}
});
在初始化checkbox的状态值前,添加h.checkBox.setOnCheckedChangeListener(null);
所以问题2和问题3一般会一起出现,都要一起解决。
public View getView(final int position, View convertView,
ViewGroup parent) {
// TODO Auto-generated method stub
if (convertView == null) {
convertView = getLayoutInflater().from(mainActivity.this)
.inflate(R.layout.itemview, null, false);
h = new hold();
h.nameView = (TextView) convertView
.findViewById(R.id.nameItemTV);
h.noticeButton = (Button) convertView
.findViewById(R.id.ItemnoticeBT);
h.checkBox=(CheckBox) convertView.findViewById(R.id.itemCB);
h.checkBox.setId(position);
// h.editText = (EditText) convertView.findViewById(R.id.itemet);
convertView.setTag(h);
} else {
h = (hold) convertView.getTag();
}
h.checkBox.setOnCheckedChangeListener(null);
h.checkBox.setChecked(checkBoxState.get(position));
h.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
checkBoxState.put(position, isChecked);
}
});
return convertView;
}
相关文章推荐
- listview的item中含有checkbox的一些问题
- 关于ListView的Item含有CheckBox所遇到的一些问题
- 解决listView或者recycleView 的item有CheckBox复用问题
- C#中??和?分别是什么意思? 在ASP.NET开发中一些单词的标准缩写 C#SESSION丢失问题的解决办法 在C#中INTERFACE与ABSTRACT CLASS的区别 SQL命令语句小技巧 JQUERY判断CHECKBOX是否选中三种方法 JS中!=、==、!==、===的用法和区别 在对象比较中,对象相等和对象一致分别指的是什么?
- android ListView的Item中有CheckBox,导致OnItemClick不响应的解决办法
- Android ListView的Item中有CheckBox,导致OnItemClick不响应的解决办法
- ListView 删除item删除不了的问题解决办法
- ListView的Item中有CheckBox,导致OnItemClick不响应的解决办法
- 关于ListView中checkBox选中状态错乱问题的解决办法
- ListView或GridView嵌入ScrollView中时,只显示一个Item并且默认将此Item置顶的问题解决办法
- 今天使用PullToRefreshListView时遇到Item点击事件失效问题,特此记下解决办法
- android ListView item中添加checkbox之后点击无效的解决办法
- Android 中ListView点击Item无响应问题的解决办法
- Gridview, ListView中的item含有checkbox,setOnItemClickListener方法失效的问题
- listview的item中edittext与进度条出现问题的解决办法;
- 关于ListView中含有CheckBox,Button等控件失去焦点的解决办法
- 解决ListView含有CheckBox时ListView不响应的问题
- ListView点击单个Item失效问题解决办法
- android ListView的Item中有CheckBox,导致OnItemClick不响应的解决办法
- android ListView在使用中碰得一些问题的解决办法