gpt4 book ai didi

android - 如何检索自定义 View 的状态?

转载 作者:太空狗 更新时间:2023-10-29 16:37:03 25 4
gpt4 key购买 nike

我创建了自定义 View ComplexView,其中包含 EditText。我在他的布局中有 fragment DetailsFragment 和 3 个 ComplexView。当我在我的 DetailsFragment 中输入值 (A,B,C) 然后推送和弹出一个 fragment 时,所有 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);
}
}

最佳答案

发生这种情况的原因是 ComplexView 的每个实例中的 EditText 与该 View 的每个其他实例共享一个 ID。当您的 ComplexView 将保存/恢复事件分派(dispatch)给它的子级时,共享相同 ID 的 View 会变得有点奇怪。

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

你可以这样做:

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

@Override
protected void dispatchRestoreInstanceState(SparseArray<Parcelable> container) {
dispatchThawSelfOnly(container);
}

现在,当您的 ComplexView 恢复或保存它的状态时,它只会保存或恢复它自己的状态;你是在告诉它你将自己处理 child 的保存和恢复。

Cyril Mottier 刚刚在此 here 上发布了一些不错的幻灯片.提到这个问题的文章大约出现了 80%。

关于android - 如何检索自定义 View 的状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25998596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com