您的位置:首页 > 其它

ListView与item中控件焦点抢占及错位问题

2016-08-12 10:49 337 查看

焦点抢占

通常在LitView的item里面有可以点击的控件时,这个时候ListView的item将会失去焦点不能点击。

这时有两种解决办法分别如下:

方法一:

就是在该item中要点击的控件上设置android:focusable=”false”这个属性;

方法二:

就是在该item父控件也就是最外层控件上设置android:descendantFocusability=”blocksDescendants”.

错位问题

通过上面两个方法就可以解决item与item中控件焦点的问题。但这时候你会发现新的问题,那就是list一屏展示不下时,如当点击勾选一个CheckBox 时,再滑到另一屏时,你会发现另一屏的也有被勾选上了。所有的CheckBox全错位了,一下感觉全乱套了,这时也有两种方法可以解决。

方法一:

就是在实体Bean对象中添加一个boolean属性来纪录当前状态,及实现get、set方法;完成后再到适配器Adapter的getView中代码实现如下:

......
final CheckBox checkBox = holder.getView(R.id.id_cb);
checkBox.setChecked(bean.isCheck());
checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
bean.setCheck(checkBox.isChecked());
}
});
......


方法二:

就是在把当前状态保存到一个集合里面,代码如下:

......
List<Integer> mPos = new ArrayList<>();
final CheckBox checkBox = holder.getView(R.id.id_cb);
//                checkBox.setChecked(bean.isCheck());
checkBox.setChecked(false);
if (mPos.contains(position)){
checkBox.setChecked(true);
}
checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//                        bean.setCheck(checkBox.isChecked());
if (checkBox.isClickable()){
mPos.add(holder.position);
}else {
mPos.remove((Integer) holder.position);
}
}
});

......
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: