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”
来启用保存状态
我正在使用 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”
来启用保存状态