【发布时间】:2015-03-31 17:35:04
【问题描述】:
这适用于运行 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,所以通过子 View 间接执行它似乎非常间接。
如何告诉 ListView 我希望它的哪一部分显示在屏幕上?
【问题讨论】:
-
你检查this one了吗?
-
@m0skit0 看起来他不是在尝试定位;看起来他正在尝试设置选择。我没有看到我的问题的解决方案。无论如何,传递给 getView 的 convertViews 仅适用于可见视图,因此尝试在 getView 中解决此问题似乎本末倒置。
标签: android listview android-listview