我在多种选择模式下有ListView
。每当我点击一个项目,我都想处理那个事件。为此,我使用以下逻辑。
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
OverlayTypes selected = (OverlayTypes) getListAdapter().getItem(
position);
boolean isChecked = getListView().getCheckedItemPositions().valueAt(
position);
Log.i(TAG, position+" is "+isChecked);
}
但每当检查一个项目时,getChecked
为'false','true'反之亦然。为什么呢?
答案 0 :(得分:1)
这可能是计时问题,在您打印到LogCat之后,复选框的值可能不会更新。
尝试更改行
boolean isChecked = getListView().getCheckedItemPositions().valueAt(position);
到
boolean isChecked = l.getCheckedItemPositions().valueAt(position);
查看是否阅读本地副本而不是全局副本有帮助。
答案 1 :(得分:0)
我的问题是我在获取自定义适配器的getView()
方法时过于雄心勃勃。在getView()
中,我尝试将Checkable
视图设置为我在设置中的值,而没有意识到在适配器中处理了已检查状态。
如果这是有道理的。