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

Android listView.setSelection(n);m=listView.getSelectedItemPosition()//m!=N为什么?,android,api,listview,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(哪个方法不起作用? 那么,这是一个

调用ListView的setSelection()似乎有问题。很多人都在问这件事。有答案,但没有一个有效。忽略视觉影响的问题。以下是导致意外结果的基本场景:

listView.setSelection(5); //listView is a ListView. there are >= 6 items in the list
int sel=listView.getSelectedItemPosition();
您可能期望sel==5,但实际上它是-1(哪个方法不起作用?

那么,这是一个错误吗?如果不是,那么控制所选项目的设置和检索的规则是什么?

如果您在setSelection的文档中看到以下内容:

设置当前选定的项目。如果 在触摸模式下,将不显示该项目 已选中,但仍将被选中 位置合适。如果 指定的选择位置较少 大于0,则项目位于位置0 将被选中


这样,它返回-1是完全有道理的。即使您在触摸模式下运行此方法,该项目也不会被选中,很可能是这样。

我同意Eric的回答。然而,如果你仍然想让它工作,这里有一个变通方法

对于您的onItemClick部件,请使用以下内容(我有多个ListView…)

假设HrList定义为

ListView HrList = (ListView) findViewById(R.id.Hrlist);

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

这是什么意思,但它仍然会被正确定位?我还没有尝试过,但我猜这意味着该项目将位于屏幕的中心,或者至少它将在视图中。谢谢。我想知道如果setSelection方法因为当前处于的模式(触摸模式)而没有执行任何操作,那么抛出RuntimeException是否更有意义。这可能会节省大量的时间和问题,因为电话的行为就像一切正常一样,并且它已经执行了你要求它做的事情……如果你觉得答案对你来说是正确的,那么如果你接受了答案就好了。
HrList.getFirstVisiblePosition();
ListView HrList = (ListView) findViewById(R.id.Hrlist);