我正在使用CustomView,它扩展了一些像FrameLayout这样的Android视图。在我的布局中,我使用带有自定义PagerAdapter的ViewPager。
问题是当片段重新附加到ViewPager / Activity时,我的查看 没有恢复它的状态。例如,我有三个片段,如果我滑到最后一个片段并返回到第一个片段,ScrollView就不是我允许它的位置:它返回到默认值,在顶部。
我知道使用PagerAdapter,并非所有片段在同一时间都是活动的,基本上是+ 1 / -1。
我找不到为什么我的View.onSaveInstanceState()没有被调用,所以为onRestoreInstanceState。
答案 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”来启用保存状态。