Android,在定位更改后,焦点从视图转到另一个视图

时间:2016-05-13 22:50:10

标签: java android focus onrestoreinstancestate android-compound-view

我创建了一个自定义复合视图,类似于

<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);
}

这应该可以防止将保存/恢复实例状态调用分派给子视图(TextViewEditText)。

现在我有一个包含两个自定义视图的片段,具有不同的ID;当方向发生变化时,焦点总是在重新创建片段后转到第一个EditText。我无法理解为什么。

例如,让我们调用edittext1和edittext2属于具有id1和id2的自定义视图的edittexts,这是会发生的事情: edittext2有焦点 - &gt;方向改变发生 - &gt; onSaveInstaceState调用了两个视图 - &gt; edittext2 onChangeFocus被调用(从true到false) - &gt;两个视图上的onRestoreInstanceStateCalled - &gt; edittext1 onFocusChange被调用(从false变为true)。

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

0 个答案:

没有答案