EditText在Fragment中使用Settext无效

admin 9975 2026-02-11 10:24:38

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'”

上一篇
下一篇
相关文章