以编程方式在ListView中设置位置而不滚动

问题描述 投票:0回答:2

这适用于运行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我想在屏幕上看到哪一部分?

android listview android-listview
2个回答
5
投票

AbsListView中有一个名为smoothScrollToPositionFromTop()的方法,它需要duration参数。因此,如果将其设置为0,则可以在不滚动动画的情况下执行此操作。

smoothScrollToPositionFromTop


0
投票

解决方案是qazxsw poi的行,目前被选为qazxsw poi。

然后从当前位置getViewgetTop突出显示而不滚动:

setSelectionFromTop

© www.soinside.com 2019 - 2024. All rights reserved.