为什么getCheckedItemPositions()返回反向真值

时间:2013-01-08 11:07:17

标签: android listview

我在多种选择模式下有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'反之亦然。为什么呢?

2 个答案:

答案 0 :(得分:1)

这可能是计时问题,在您打印到LogCat之后,复选框的值可能不会更新。

尝试更改行

boolean isChecked = getListView().getCheckedItemPositions().valueAt(position);

boolean isChecked = l.getCheckedItemPositions().valueAt(position);

查看是否阅读本地副本而不是全局副本有帮助。

答案 1 :(得分:0)

我的问题是我在获取自定义适配器的getView()方法时过于雄心勃勃。在getView()中,我尝试将Checkable视图设置为我在设置中的值,而没有意识到在适配器中处理了已检查状态。

如果这是有道理的。