Android 中有一些 View 类应该在它们的容器分离时保存它们的状态。Fragment.onViewCreated() 应该在 View.onSaveInstanceState() 之前调用。所以如果你在方法 Fragment.onViewCreated() 中设置一个值。该值应在 View.onRestoreInstanceState(Parcelable state) 方法中清除。
比如TextView、RecyclerView等类。可以阅读TextView.java的代码:
public Parcelable onSaveInstanceState() {
Parcelable superState = super.onSaveInstanceState();
// Save state if we are forced to
final boolean freezesText = getFreezesText();
boolean hasSelection = false;
int start = -1;
int end = -1;
....
if (freezesText || hasSelection) {
SavedState ss = new SavedState(superState);
....
}
....
}
有参数来控制是否保存状态:“freezesText”和“hasSelection”。TextView 不能被选中,所以 hasSelection 为 false。函数 getFreezesText() 在 TextView 类中也返回 false。所以,TextView 不会保存状态。EditText.java 的代码:
@Override
public boolean getFreezesText() {
return true;
}
EditText 返回 true,所以 EditText 应该保存状态。
有一些方法可以修复此错误:
1.执行EditText.getFreezesText()并返回false,并清除EditText中select的状态
2.实现EditText的onSaveInstanceState,返回null。像这样:
public Parcelable onSaveInstanceState() {
super.onSaveInstanceState();
return null;
}
3.使用EditText.setSaveEnable(false);
4.在xml中添加参数“saveEnable='false'”