我创建了一个自定义复合视图,类似于
<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);
}
这应该可以防止将保存/恢复实例状态调用分派给子视图(TextView
和EditText
)。
现在我有一个包含两个自定义视图的片段,具有不同的ID;当方向发生变化时,焦点总是在重新创建片段后转到第一个EditText
。我无法理解为什么。
例如,让我们调用edittext1和edittext2属于具有id1和id2的自定义视图的edittexts,这是会发生的事情: edittext2有焦点 - &gt;方向改变发生 - &gt; onSaveInstaceState调用了两个视图 - &gt; edittext2 onChangeFocus被调用(从true到false) - &gt;两个视图上的onRestoreInstanceStateCalled - &gt; edittext1 onFocusChange被调用(从false变为true)。
我不希望这种情况发生,我错过了什么?