未调用Android View onSaveInstanceState

Hug*_*sse 14 android android-view android-viewpager

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

问题是当片段重新连接到ViewPager/Activity时,我的View 没有恢复它的状态.例如,我有三个片段,如果我滑到最后一个片段然后回到第一个片段,ScrollView就不是我允许的了:它返回默认值,在顶部.

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

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

Hug*_*sse 31

答案很简单:这是因为我没有在我的视图中设置id(自定义或不自定义).onSaveInstanceState/onRestoreInstanceState如果没有将id设置为视图,则Android无法管理.

因此,当我的customView扩展基本视图而没有额外属性时,为视图设置ID解决了问题,因此应该调用onSaveInstanceState/onRestoreInstanceState.

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

来自XML

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    ...
    android:id="@+id/scrollView">
</ScrollView>
Run Code Online (Sandbox Code Playgroud)

或者来自Java

yourCustomView.setId(R.id.myCustomView);
Run Code Online (Sandbox Code Playgroud)

在最后一种情况下,您将静态ID添加到res/values/ids.xml <item name="myCustomView" type="id"/>

  • 对我来说,这不适用于横向和纵向不同布局的方向更改。OnSaveInstanceState 被调用,但 onRestoreInstanceState 不是 (2认同)