android中fragment如何保存edittext文本,EditText Settext无法使用Fragment

本文探讨了Android中TextView和EditText如何在Fragment.onViewCreated()后设置和保存状态。TextView通常不保存状态,而EditText因getFreezesText()返回true需特别处理。提供了四种解决方案,包括修改EditText的行为、重写保存实例状态等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值