0

我使用android.app.Fragment其中LinearLayout包含一个的android.widget.EditText,并且我没有土地空间布局文件夹。Aandroid.text.TextWatcher通过 被添加到 EditText 中addTextChangedListener。假设我在 EditText 中输入了一个字母“a”并旋转了 android 设备。我希望现有的 Fragment 被完全销毁并创建一个新的 Fragment 实例。另外,我希望新片段中的 EditText 为空。但令我惊讶的是,发生了以下情况:-

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

1 回答 1

1

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

  1. Activity 及其所有 Fragment 都有机会将其当前状态存储在 `onSaveInstanceState() 中。

  2. Activity 及其所有 Fragment 被销毁

  3. 再次创建 Activity 及其所有片段。

  4. Activity 和 Fragments 的状态被恢复。如果您没有显式覆盖onSaveInstanceState()并且您super.onCreate()从自己的onCreate()方法调用,这意味着 Android 将恢复任何小部件的状态,例如EditTexts。对于每一个EditText,恢复文本都会导致调用beforeTextChanged()onTextChanged()

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

于 2013-07-25T16:06:57.553 回答