- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
这是一个概念问题。对不起,如果这是一个简单的问题,我几天前开始学习Android。
当用户退出 Activity 时,我试图保存 recyclerview 的状态。我读了一些关于这个的文章。
在这篇文章中https://panavtec.me/retain-restore-recycler-view-scroll-position这些方法是:
protected Parcelable onSaveInstanceState();
protected void onRestoreInstanceState(Parcelable state);
在另一篇文章中 RecyclerView store / restore state between activities这些方法是:
protected void onSaveInstanceState(Bundle state)
protected void onRestoreInstanceState(Bundle state)
这两篇文章假装回答同一个问题,如何恢复 recyclerview 的状态。
问题:
1 - 第一篇文章在layoutManager上实现了这些方法!?所以,我正在使用默认的 GridLayoutManager,所以要在 GridLayoutManager 中实现保存和恢复实例,我应该创建自己的类来扩展默认类吗?
2 - 我可以在布局管理器中实现这些方法,而不管它们是否在 Activity 中实现?
3 - 实现这些方法的正确位置在哪里?或者是否有官方回答这个问题:“如何恢复 recyclerview 的状态?”
我正在寻找关于这三个问题的意见,而不是完整的实现。
最佳答案
1 - The first article implements these methods on a layoutManager!? So, I'm using a default GridLayoutManager, so to implement save and restore instance in the GridLayoutManager I should create my own class extending the default class?
如果您同时查看文章和 SO 帖子,它们不会实现LayoutManager
中的任何内容,它们只是使用已经存在的方法。如果您查看 GridLayoutManager 的文档页面已经有 onSaveInstanceState()
和 onRestoreInstanceState (Parcelable state)
方法(这两个方法是博客一开始提到的“便捷 API”)。
我相信您已经注意到 GridLayoutManager
继承自 LinearLayoutManager
LinearLayoutManager.onSaveInstanceState()的官方文档:
Called when the LayoutManager should save its state. [...] Returns: Parcelable Necessary information for LayoutManager to be able to restore its state
官方文档LinearLayoutManager.onRestoreInstanceState (Parcelable state)非常不完整,但您可以看出它使用由 LinearLayoutManager.onSaveInstanceState() 返回的相同 Parcelable
参数
2 - I can implement these methods in the layoutmanager regardless of implementing them in the activity?
明确一点:无需重新实现 LayoutManager。我不明白你为什么需要这样做,这些方法已经准备好可以使用了。同名的 Activity 方法是您需要实现的。
3 - Where is the correct place to implement these methods? or is there a official answer to the question: "How restore the state of a recyclerview?"
执行此操作的正确位置是 Activity 的生命周期方法,这些方法将在适当的时间调用以保存和恢复您的 LayoutManager
状态。引用您提到的SO答案:
//---> this is the Activity's onSaveInstanceState
protected void onSaveInstanceState(Bundle state) {
super.onSaveInstanceState(state);
// Save list state
mListState = mLayoutManager.onSaveInstanceState();
state.putParcelable(LIST_STATE_KEY, mListState);
}
//---> this is the Activity's onRestoreInstanceState
protected void onRestoreInstanceState(Bundle state) {
super.onRestoreInstanceState(state);
// Retrieve list state and list/item positions
if(state != null)
mListState = state.getParcelable(LIST_STATE_KEY);
}
//---> this is the Activity's onResume
@Override
protected void onResume() {
super.onResume();
if (mListState != null) {
mLayoutManager.onRestoreInstanceState(mListState);
}
}
我还没有看到任何关于具体恢复 RecyclerView/LayoutManager 状态的官方文档,但是 lifecycle subject是Android中非常重要的一个。我相信,在充分理解这一点之后,可以针对特定用例做出正确的决定。
希望这有帮助;)
关于android - 在哪里使用 onSaveInstanceState 和 onRestoreInstanceState 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50070562/
所以我对 onSaveInstanceState 和 onRestoreInstanceState 有一个奇怪的问题。以下是我到目前为止所拥有的,并且运行良好。方法正常调用,值保存和恢复都很好。 @O
我需要你的帮助。我正在制作一个应用程序,我使用方法 onSaveInstanceState() 和 onRestoreInstanceState(),但第二种方法不起作用。 当按下主页按钮时,我可以看
继续上一个问题 第一个屏幕 Activity 我正在单击一个按钮并执行此操作 Intent intent = new Intent(MainMenu.this, NewClass.class); in
我最近在使用 onSaveInstanceState() 和 onRestoreInstanceState() 时遇到了一些麻烦。我有多个 Activity 使用这些方法来保存状态,以防它们被系统清理
这个问题在这里已经有了答案: onSaveInstanceState () and onRestoreInstanceState () (13 个答案) 关闭 9 年前。 我对 Android 中的
我已经编写了所有需要的代码来保存我的 Activity 状态(一个带有 EditText 小部件的简单表单)并在手机旋转时恢复它,而且效果很好。 我的问题是管理屏幕开/关变化:关闭时,onSaveIn
我想在 App 进入 onPause 时保存 textView 的值。所以我实现了 onSaveInstanceState 和 onRestoreInstanceState。但如下面的 logcat
对不起,我的不理解,但我是android开发的新手。 我有一个包含 Activity A 和 Activity B 的应用程序,我从 Activity A 转到 Activity B。当我离开 Act
我是否遗漏了什么或 Fragment 没有 onRestoreInstanceState() 方法?如果没有,我该如何获得类似的东西? 最佳答案 fragment 没有 onRestoreInstan
当我在 listView 中输入某些内容并旋转它后,listView 返回 null 而不是我输入的文本。您能解释一下为什么会发生这种情况吗? override fun onRestoreInstan
情况是我想创建一个应用程序,每次单击按钮时它应该能够在 LinearLayout 中创建一个新的 TextView。来自EditText的文本被分配给所述TextView。我成功地做到了这一点。然而,
我对 Android 开发和 StackOverflow 都很陌生,我希望我问的不是一个愚蠢的问题,这个问题以前有人问过,但我在上面找不到任何东西。 我正在制作一个应用程序,它在连接到蓝牙设备时启动(
如何保存/恢复附加到 CursorAdapter 的 ListView 的状态?示例: 我有一个带有 3 个 ListView 的 Android Activity:国家、地区、城市。 它们附加到 3
我在一个计数程序中遇到了一个问题,该程序显示了诸如 onCreate、onStart 等方法被调用了多少次,当我从 Activity1 转到 Activity2 然后再回到 Activity1 时它似
我正在开发一个应用程序,当您转到屏幕时,您可以从 onCreate 中创建的对话框中选择您的位置。选择位置后,它会将其写入预定义的 TextView。我遇到的一个问题是,当屏幕方向发生变化时,它会重新
下面的 SwiperActivity,从 ActionBarSherlock 4.0.2 库扩展 SherlockFragmentActivity。我只能在加载不同的应用程序负载,然后切换回来后,在
ClassCastException随机出现,用于在onRestoreInstanceState()中恢复Vector。恢复vector一般都很好完成,但有时会出现异常。 我认为当 Activity
在我的应用程序中,在正常操作期间执行 onRestoreInstanceStatance 函数并在某些监听器中导致空指针异常,而无需调用该监听器。我的应用程序包含大量数据,我在 onPause 中写入
我正在尝试弄清楚 onSaveInstanceState/onRestoreInstanceState 如何与对话框一起工作。使用 Acitivity 很容易,因为它们会在 Activity 被终止/
我正在尝试在我的 Activity 中保存数据而不是恢复它。我将数据保存在 onSaveInstanceState() 中,然后尝试恢复 onRestoreInstanceState() 中的数据。
我是一名优秀的程序员,十分优秀!