我的Activity
有ListView
,其中包含CheckedTextView
。单击某个项目后,我会使用setItemChecked(position, true)
使该项目突出显示。
但是,当活动刚刚启动时,当我触摸某个项目时,位置0中的项目也会突出显示。我使用getSelectedItemPosition()
来检查,即使它处于触摸模式(isinTouchMode
= true),它返回0但不是-1。
滚动listView
后,它正常工作,getSelectedItemPosition()
按预期返回-1。
为什么会这样?我只是希望活动在触摸模式下处理而不是按键输入。
如果无法避免。我可以纠正吗?我使用ListView.setSelection(-1)
但它没有效果。
编辑:我通过删除一些冗余代码以某种方式解决问题。我希望listView中指定位置的项目显示在listView的顶部,并在活动开始时突出显示,所以我使用下面的代码:
ListView.setItemChecked(position, true);
ListView.setSelectionFromTop(position, 0);
多余的是(我使用相同的代码两次):
ListViewAdapter.notifyDataSetInvalidated();
ListView.setItemChecked(position, true);
ListView.setSelectionFromTop(position, 0);
虽然我解决了这个问题,但我仍然想知道背后发生了什么。当我“触摸”listView两次时,为什么选择位置0?
答案 0 :(得分:0)
您是否为选中的行设置了标记? 你必须在getView()中为视图设置标记。
之后只有你可以考虑视图的位置。 尝试使用它。(例如:yourInflatedView.setTag(position);)