android是否会在旋转设备后重放上次事件

时间:2013-07-25 15:43:27

标签: android

我在android.app.Fragment内使用LinearLayout,其中包含一个android.widget.EditText,我没有LANDpace布局文件夹。 android.text.TextWatcher通过addTextChangedListener添加到EditText。说我输入一封信" a"进入EditText,我旋转Android设备。我希望现有的Fragment可以完全销毁,并创建一个新的Fragment实例。此外,我希望EditText在新Fragement中为空。但令我惊讶的是,发生了以下情况: -

  1. Fragment及其包含的Activity都被完全销毁
  2. 创建了一个新的Fragment和Activity实例。到目前为止很好。这是我的期望。
  3. 但是,重播了EditText上的最后一个事件。最后的事件是beforeTextChanged()和onTextChanged()。这怎么可能?如果创建了一个新的fragment实例,这意味着会创建一个新的EditText实例,然后谁可以重新生成以重播EditText上的最后一个事件?

1 个答案:

答案 0 :(得分:1)

我怀疑配置更改期间的以下事件序列描述:

  1. 活动及其所有碎片都有机会将其当前状态存储在`onSaveInstanceState()中。

  2. 活动及其所有碎片都被销毁

  3. 再次创建活动及其所有碎片。

  4. 恢复活动和片段的状态。如果您没有明确覆盖onSaveInstanceState(),并且从您自己的super.onCreate()致电onCreate()方法,这意味着Android将恢复任何小部件的状态,例如EditText s。对于每个EditText,恢复文字会调用beforeTextChanged()onTextChanged()

  5. 请注意,第3步与“重播之前的事件”不同,因为beforeTextChanged()onTextChanged()的参数值将指示不止一个字符的变化。