listView.setSelection(N); M = listView.getSelectedItemPosition(); // m!= n。为什么?

时间:2011-03-28 08:49:26

标签: android api listview

调用ListView的setSelection()似乎有问题。很多人都在问这个问题。有答案,但没有工作。忽视视觉影响的问题。这是一个导致意外结果的基本方案:

listView.setSelection(5); //listView is a ListView. there are >= 6 items in the list
int sel=listView.getSelectedItemPosition();

你会期望sel == 5但实际上它是-1(哪种方法不起作用?)
这是一个错误,如果没有,那么管理所选项目的设置和检索的规则是什么?

2 个答案:

答案 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);

所以是的,在触摸模式下,它不会将项目注册为选中状态。但是,它确实将其移动到可靠的位置(即顶部),您可以使用它来获取值。

相关问题