调用ListView的setSelection()似乎有问题。很多人都在问这个问题。有答案,但没有工作。忽视视觉影响的问题。这是一个导致意外结果的基本方案:
listView.setSelection(5); //listView is a ListView. there are >= 6 items in the list
int sel=listView.getSelectedItemPosition();
你会期望sel == 5但实际上它是-1(哪种方法不起作用?)
这是一个错误,如果没有,那么管理所选项目的设置和检索的规则是什么?
答案 0 :(得分:2)
如果你在setSelection的文档中看到,你会发现:
设置当前选定的项目。如果 在触摸模式下,该项目不会 选中但仍然会 适当定位。如果 指定的选择位置较少 比0,然后是位置0的项目 将被选中。
这样,它返回-1就完全有道理了。即使您在触摸模式下运行此方法也不会选择该项目,因为您很可能是这样。
答案 1 :(得分:0)
我同意Eric的回答。但是,如果你仍想让它发挥作用,这是一个解决方法。
你的onItemClick部分的使用以下内容(我有多个listviews ...)
public void onItemClick(AdapterView<?> parentView, View v, int chosenPosition, long
myLong) {
switch(parentView.getId()){
case R.id.Hrlist:
parentView.setSelection(chosenPosition);
break;
case R.id.Minlist:
parentView.setSelection(chosenPosition);
break;
case R.id.Seclist:
parentView.setSelection(chosenPosition);
}
}
然后在你的另一种方法中你可以使用以下内容:
HrList.getFirstVisiblePosition();
假设HrList定义为
ListView HrList = (ListView) findViewById(R.id.Hrlist);
所以是的,在触摸模式下,它不会将项目注册为选中状态。但是,它确实将其移动到可靠的位置(即顶部),您可以使用它来获取值。