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

时间:2019-03-30 22:30:34

标签: android android-recyclerview smooth-scrolling

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

在浏览应用程序时,我希望两个供稿状态都保持不变。当前,如果您在视图寻呼机中的两个提要之间滑动,它们的状态将保存在当前位置,但是如果导航到配置文件或设置,则提要在返回时会回到开始位置。

我能够使用共享视图模型将最后一项保存在两者中(我发现这是最简单的方法)。我的问题是返回时滚动回到该位置。 刚开始,我只是尝试了一个简单的滚动到该位置,但是那没用,我相信这是因为我试图在填充回收站之前调用它。

我想知道的是,当我导航到其他片段时,是否有办法让回收站填充?我担心我的应用程序的数据消耗。如果我需要重新填充两个不同供稿中的数百张已经浏览过的照片,那么每次用户在片段之间跳转时,都会从用户那里获取大量数据。

谢谢您的提示和想法,谢谢。

1 个答案:

答案 0 :(得分:0)

有两种解决方法。一种是即使导航到其他片段后也可以保持回收器视图填充。您可以通过设置// inline fun <reified T: Activity> Activity.intentFor(builder: Intent.() -> Unit) { // return Intent(this, T::class.java).apply(builder) // } startActivity(intentFor<OtherActivity>() { putParcelableExtra("player", player) }) val player = intent.getParcelableExtra("player") 的屏幕页面限制来做到这一点。 Limit参数是处于空闲状态的视图层次结构中应保留到当前页面任一侧的页面数。

ViewPager

如您所说,这可能会占用大量内存。

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

在回收者视图适配器中设置数据后,请执行以下操作

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