这是针对运行Android 4.4.2的平板电脑。我有一个包含数百个项目的ListView,一次约有20个可见。用户不需要平滑滚动的动画。如何在不使用smoothScrollToPosition()的情况下以编程方式设置Listview中的显示位置?
我搜索了Stack Overflow,在Android ListView中,setSelection()似乎不起作用,他们建议这样做:
mListView.clearFocus();
mListView.post(new Runnable() {
@Override
public void run() {
mListView.setSelection(index);
}
});
。。。但这只是设置选择;它不会使ListView的该部分可见。setSelection()似乎是整个网络上流行的解决方案,但是我在文档中找不到任何内容说setSelection()也设置位置,并且它仅设置选择内容,并且不会更改我的位置。
在不使用smoothScrollToPosition的情况下转到Listview中的项目时,他们提出了Romain Guy的解决方案...
[myListView.post(new Runnable()
{
@Override
public void run()
{
myListView.setSelection(pos);
View v = myListView.getChildAt(pos);
if (v != null)
{
v.requestFocus();
}
}
});]
这个问题是我的ListView是ListActivity的一部分,该ListActivity通过自定义适配器的getView()进行管理,因此不可见的视图将被回收,即,如果我请求不在屏幕上的视图的子视图,返回null。无论如何,它实际上是我要控制的ListView,因此通过子级View间接执行它似乎完全是间接的。
如何告诉ListView我希望在屏幕上看到哪一部分?
AbsListView中有一个方法被调用smoothScrollToPositionFromTop()
,它带有duration
参数。因此,如果将其设置为0,则无需滚动动画即可完成此操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句