0

我有一个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它是“假”和“真”,反之亦然。为什么?

4

2 回答 2

1

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

尝试改变你的线路

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

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

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

于 2013-01-08T11:11:56.510 回答
0

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

如果这是有道理的。

于 2013-01-08T20:42:18.947 回答