这适用于运行Android 4.4.2的平板电脑。我有一个包含数百个项目的ListView,一次可见约20个。用户不希望平滑滚动的动画。如何在不使用smoothScrollToPosition()的情况下以编程方式设置Listview中的显示位置?
我搜索了Stack Overflow并在Android ListView setSelection() does not seem to work中他们建议:
mListView.clearFocus();
mListView.post(new Runnable() {
@Override
public void run() {
mListView.setSelection(index);
}
});
。 。 。但它只是设定选择;它没有将ListView的那部分带入视图。 setSelection()似乎是整个网络上流行的解决方案,但我在文档中找不到任何说setSelection()也设置位置的东西,它只设置选择而不改变我的位置。
在Go to a item in Listview without using smoothScrollToPosition,他们提出了Romain Guy的解决方案......
[myListView.post(new Runnable()
{
@Override
public void run()
{
myListView.setSelection(pos);
View v = myListView.getChildAt(pos);
if (v != null)
{
v.requestFocus();
}
}
});]
这个问题是我的ListView是通过自定义适配器的getView()管理的ListActivity的一部分,因此不可见的视图被回收,即,如果我请求一个不在屏幕上的视图的子视图返回null。无论如何,它确实是我试图控制的ListView,所以通过子视图间接地做它似乎非常间接。
如何告诉ListView我想在屏幕上看到哪一部分?
AbsListView中有一个名为smoothScrollToPositionFromTop()
的方法,它需要duration
参数。因此,如果将其设置为0,则可以在不滚动动画的情况下执行此操作。
解决方案是qazxsw poi的行,目前被选为qazxsw poi。
然后从当前位置getView
和getTop
突出显示而不滚动:
setSelectionFromTop