平滑滚动到位置,而不是每次都下载所有项目

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

我正在使用类似于Instagram的Feed构建照片共享应用。主要供稿片段由视图寻呼机中的两个不同的供稿组成(最近和之后),然后还有两个与主要供稿片段(配置文件和设置)处于同一级别的其他片段。

我想在导航应用程序时保留两个Feed状态。目前,如果您在视图寻呼机中的两个Feed之间滑动,其状态将保存在当前位置,但如果导航到配置文件或设置,则返回时Feed会返回到开头。

我能够使用共享视图模型保存最后一项(我发现这是最简单的方法)。我的问题是返回时滚回到位置。起初,我刚刚尝试了一个简单的滚动到位置,但这不起作用,我相信这是因为我试图在回收器填充之前调用它。

我想知道的是,在导航到其他片段时,有没有办法让我保持回收器的填充?我担心我的应用程序的数据消耗。如果我需要重新填充在两个不同的源中可能已经滚动数百个的照片,那么每次用户在片段之间跳转时,都会从用户那里获取大量数据。

我很感激任何提示和想法,谢谢。

android android-recyclerview smooth-scrolling
1个回答
0
投票

有两种方法可以解决。一个是即使在导航到其他片段后也可以保持回收器视图的填充。您可以通过设置ViewPager的屏幕页面限制来实现。限制参数是在空闲状态下应保留到视图层次结构中当前页面任一侧的页面数。

ViewPager.setOffscreenPageLimit(3) // in this case 3 fragments on either side of the current page will be retained.

正如你所说,它可能需要大量的内存。

另一种方法是在主线程中发布滚动代码,以便您的回收站视图有足够的时间来初始化和填充项目。

在Recycler视图适配器中设置数据后执行以下操作

recyclerView.post(new Runnable() {
    @Override
    public void run() {
        // Call your scrolling code  
        recyclerView.smoothScrollToPosition(adapter.getItemCount() - 1);                                 
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.