Android中有一些View类应该在分离容器时保存它们的状态。 应在View.onSaveInstanceState()之前调用Fragment.onViewCreated()。 因此,如果您在方法Fragment.onViewCreated()中设置一个值。 应在View.onRestoreInstanceState(Parcelable状态)方法中清除该值。
例如,类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应该保存状态。
有一些方法来解决这个bug:
1.Implement EditText.getFreezesText()并返回false,并清除EditText中的select状态
2.实现EditText的onSaveInstanceState,返回null。如下:
public Parcelable onSaveInstanceState() { super.onSaveInstanceState(); return null; }
3.使用EditText.setSaveEnable(false);
4.add param in xml“saveEnable =’false’”