焦點搶佔
通常在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);
}
}
});
......