Android 查看 onSaveInstanceState 未调用

Android View onSaveInstanceState not called

我正在使用 CustomView,它扩展了一些 Android 视图,例如 FrameLayout。在我的布局中,我使用带有自定义 PagerAdapter 的 ViewPager。

问题是当片段重新附加到 ViewPager/Activity 时,我的 View 没有恢复它的状态 .例如,我有三个片段,如果我滑动到最后一个片段并返回到第一个片段,则 ScrollView 不在我让它的位置:它回到默认值,在顶部。

我知道使用 PagerAdapter 时,并非所有片段都同时处于活动状态,基本上只是 +1/-1。

我找不到为什么我的 View.onSaveInstanceState() 没有被调用,所以 onRestoreInstanceState。

简单的答案:这是因为我没有将 id 设置到我的视图(自定义与否)。如果没有为视图设置 ID,Android 不会管理 onSaveInstanceState/onRestoreInstanceState

因此,由于我的 customView 正在扩展基本视图,没有额外的 属性,为视图设置 ID 解决了这个问题,因此 onSaveInstanceState/onRestoreInstanceState 被调用了。

总而言之,使用以下方法之一:

来自 XML

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    ...
    android:id="@+id/scrollView">
</ScrollView>

或来自Java

yourCustomView.setId(R.id.myCustomView);

是最后一种情况,你把static id加到res/values/ids.xml <item name="myCustomView" type="id"/>

默认保存状态

我们现在已经为视图保存和恢复其状态准备好了一切。但是,默认情况下不会发生这种情况。如果您希望视图的实例自动保存状态,您可以将此行添加到 init 方法中:

setSaveEnabled(true);

是否执行此操作取决于您。即使您的视图默认不保存状态,视图的用户始终可以通过调用 setSaveEnabled(true) 或在布局 xml.

中指定 android:saveEnabled=“true” 来启用保存状态