簡體   English   中英

未調用 Android 視圖 onSaveInstanceState

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM