EditText在Fragment中使用Settext无效
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。另外,在TextView类中,getFreezesText()函数也会返回false。
因此,TextView不会保存状态。
EditText.java的代码:
@Override
public boolean getFreezesText() {
return true;
}
EditText返回true,因此EditText应该保存状态。
有一些方法可以解决这个bug:
1.实现EditText.getFreezesText()并返回false,清除EditText中所选内容的状态
2.实现EditText的onSaveInstanceState方法,返回null。像这样:
public Parcelable onSaveInstanceState() {
super.onSaveInstanceState();
return null;
}
3.使用EditText.setSaveEnable(false);
4.在xml中添加参数“saveEnable='false'”

