I have an application where all the UI comes from a server, so the views are all custom and generated programmatically. Additionally, I have to remove all the views and re-create them when the device is rotated.
In one of my custom views I save the state and it's called on device rotation:
override fun onSaveInstanceState(): Parcelable = Bundle().apply {
putInt("selectedTabPosition", tabLayout.selectedTabPosition)
putParcelable("superState", super.onSaveInstanceState())
}
In my Fragment, I can see the saved state exists after device rotation. So I view?.restoreHierarchyState(state)
in the fragment to call all children onRestoreInstanceState
:
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
// Get the UI from serve, build the UI...
savedInstanceState?.getSparseParcelableArray<Parcelable>("android:view_state")?.let { state ->
view?.restoreHierarchyState(state)
}
}
The view?.restoreHierarchyState(state)
is called with the proper state. But onRestoreInstanceState
is not called in my custom view (which exists in the view hierarchy)
question from:
https://stackoverflow.com/questions/65829809/onrestoreinstancestate-is-not-called-when-custom-views-are-generated-programmati 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…