我创建了一个自定义复合视图,例如
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<TextView android:id="@+id/label" />
<EditText android:id="@+id/edittext" />
</merge>
当然这是一个简化版。
我已经设法在绑定到视图的 java 类中保存和恢复视图实例状态,但是我重写了
@Override
protected void dispatchSaveInstanceState(SparseArray<Parcelable> container) {
dispatchFreezeSelfOnly(container);
}
@Override
protected void dispatchRestoreInstanceState(SparseArray<Parcelable> container) {
dispatchThawSelfOnly(container);
}
这应该防止将保存/恢复实例状态调用分派给子视图(theTextView
和 the EditText
)。
现在我有一个片段,其中包含两个具有不同 ID 的自定义视图;EditText
当方向发生变化时,焦点总是在片段重新创建后转到第一个。我不明白为什么。
例如,让我们调用 edittext1 和 edittext2 属于具有 id1 和 id2 的自定义视图的 edittexts,会发生这种情况:edittext2 具有焦点 -> 方向更改发生 -> onSaveInstaceState 在两个视图上调用 -> edittext2 onChangeFocus 调用(从 true 到 false ) -> onRestoreInstanceStateCalled 在两个视图上 -> edittext1 onFocusChange 调用(从假到真)。
我不希望这种情况发生,我错过了什么?