Tom*_*asz 2 android android-custom-view
我ComplexView用EditText里面创建了自定义视图.我的布局中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)
发生这种情况的原因是,EditText您ComplexView共享的每个实例中都有一个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%.
| 归档时间: |
|
| 查看次数: |
504 次 |
| 最近记录: |