未调用Android View onSaveInstanceState

时间:2015-02-18 14:48:49

标签: android android-viewpager android-view

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

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

我知道使用PagerAdapter,并非所有片段在同一时间都是活动的,基本上是+ 1 / -1。

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

2 个答案:

答案 0 :(得分:26)

答案很简单:因为我没有将 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"/>

答案 1 :(得分:4)

默认保存状态

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

setSaveEnabled(true);

是否要这样做取决于您。即使您的视图默认情况下不保存状态,视图的用户也可以通过调用setSaveEnabled(true)或通过在布局xml中指定android:saveEnabled =“true”来启用保存状态。