[英]Android Programming: onPause() called, onSaveInstanceState(…) not
[英]Android View onSaveInstanceState not called
我正在使用 CustomView,它扩展了一些 Android 视图,如 FrameLayout。 在我的布局中,我使用带有自定义 PagerAdapter 的 ViewPager。
问题是当片段重新附加到 ViewPager/Activity 时,我的视图没有恢复它的状态。 例如,我有三个片段,如果我滑动到最后一个片段并返回到第一个片段,则 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);
最后一种情况,您将静态 id 添加到 res/values/ids.xml <item name="myCustomView" type="id"/>
默认保存状态
我们现在已经为我们的视图保存和恢复它的状态准备好了一切。 但是,默认情况下不会发生这种情况。 如果您希望视图的实例自动保存状态,可以将此行添加到 init 方法中:
setSaveEnabled(true);
是否执行此操作取决于您。 即使您的视图默认不保存状态,视图的用户始终可以通过调用setSaveEnabled(true)
或通过在布局 xml 中指定android:saveEnabled=“true”
来启用保存状态。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.