2

我创建了一个自定义复合视图,例如

<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 调用(从假到真)。

我不希望这种情况发生,我错过了什么?

4

0 回答 0