【问题标题】:ViewModel Doesn't cache data for RecyclerView and saving ListState doesn't workViewModel 不缓存 RecyclerView 的数据并且保存 ListState 不起作用
【发布时间】:2018-08-11 17:45:07
【问题描述】:

我希望 RecyclerView 在设备旋转时保持其位置。

我有 4 个课程(2 个活动和 2 个 ViewModel),分别称为 MainActivityFavouritesActivity。加上MainViewModelFavouritesViewModel,它扩展了AndroidViewModel。 FavouriteAvtivity 和 FavouriteViewModel 的所有东西都可以正常工作。同时,其他两个以相同的方式实现,但是当我旋转设备时,我的列表的滚动位置会重置,并且我已经尝试了所有关于将列表状态保存在 onSaveInstanceState() 和 onRestoreInstanceState() 中的方法。

这是我在 GitHub 上的应用程序仓库:PopularMovies

【问题讨论】:

  • 构建失败 无法获取未知属性 'MyMovieDbApiKey' ,您可以提供任何虚拟密钥以使其正确构建。
  • 你说 FavouriteAvtivity 和 FavouriteViewModel 工作得很好,对我来说 FavouriteAvtivity 是空白的。
  • 您必须收藏一些电影,然后电影才会显示在那里,我没有提供活动为空白时的布局。很抱歉造成误解。
  • @KrishnaSharma 对你有用吗?
  • No 没发现什么问题,没找到根本原因。今天有空再看,如果你找到原因,请发表评论。

标签: java android android-recyclerview retrofit2 android-architecture-components


【解决方案1】:

我发现了为什么它只发生在 MainActivity 的问题,即使实现是相同的。问题在于您的布局 movie_list_item,您必须指定恒定高度,否则布局会重新测量并在设备旋转时向上滚动列表。为了防止这种情况发生,请使用以下修改后的布局。

<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
       android:id="@+id/iv_movie_thumbnail"
       android:layout_width="184dp"
       android:layout_height="180dp" // don't use wrap_content, can use any height you want but make it that fix
       android:contentDescription="@string/movie_thumbnail"/>

【讨论】:

  • Yasss,它确实有效。太感谢了。老实说,这个错误让我发疯了。
  • @JihadNaji 很高兴为您提供帮助!谢谢!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-15
  • 1970-01-01
  • 2015-08-15
  • 1970-01-01
相关资源
最近更新 更多