如何检索自定义视图的状态?

Tom*_*asz 2 android android-custom-view

ComplexViewEditText里面创建了自定义视图.我的布局中DetailsFragment有3 ComplexView秒的片段.当我在输入的值(A,B,C) DetailsFragment,然后按下并弹出一个片段都editTexts具有相同的价值C.我实现了自己的版本onSaveInstanceState,并onRestoreInstanceState和它并不能帮助.怎么了?

@Override
protected Parcelable onSaveInstanceState() {
    Bundle bundle = new Bundle();
    bundle.putParcelable(STATE_SUPER_STATE, super.onSaveInstanceState());
    bundle.putString(STATE_DESCRIPTION_TEXT, mDescription.getText().toString());

    return bundle;
}

@Override
protected void onRestoreInstanceState(Parcelable state) {
    if (state instanceof Bundle) {
        Bundle bundle = (Bundle)state;

        super.onRestoreInstanceState(bundle.getParcelable(STATE_SUPER_STATE));
        mDescription.setText(bundle.getString(STATE_DESCRIPTION_TEXT));
    } else {
        super.onRestoreInstanceState(state);
    }
}
Run Code Online (Sandbox Code Playgroud)

Tan*_*.7x 5

发生这种情况的原因是,EditTextComplexView共享的每个实例中都有一个ID与该View的每个其他实例.当您ComplexView向其子项发送保存/恢复事件时,使用共享相同ID的视图会让事情变得有点时髦.

要解决此问题,ComplexView除了覆盖保存和恢复方法之外,还需要阻止向您的孩子发送状态保存/恢复.

你可以这样做:

@Override
protected void dispatchSaveInstanceState(SparseArray<Parcelable> container) {
    dispatchFreezeSelfOnly(container);
}

@Override
protected void dispatchRestoreInstanceState(SparseArray<Parcelable> container) {
    dispatchThawSelfOnly(container);
}
Run Code Online (Sandbox Code Playgroud)

现在当你ComplexView恢复或保存它的状态时,它只会保存或恢复它自己的状态; 你告诉它你将自己处理保存和恢复孩子.

Cyril Mottier刚刚在这里发布了一些很好的幻灯片.关于这个问题的文章约占80%.