0

内部に 1 つを含むを使用android.app.Fragmentしていますが、ランドスペース レイアウト フォルダーがありません。を介して EditText にAが追加されます。EditTextに文字「a」を入力し、Androidデバイスを回転させたとします。既存の Fragment が完全に破棄され、Fragment の新しいインスタンスが作成されることを期待しています。また、新しい Fragment では EditText が空になることを期待しています。しかし、驚いたことに、次のことが起こります:-LinearLayoutandroid.widget.EditTextandroid.text.TextWatcheraddTextChangedListener

  1. フラグメントとそれに含まれるアクティビティの両方が完全に破棄されます
  2. Fragment と Activity の新しいインスタンスが作成されます。これまでのところ良い。これは私の予想です。
  3. しかし、EditText の最後のイベントが再生されます。最後のイベントは beforeTextChanged() と onTextChanged() でした。これはどのように可能ですか?フラグメントの新しいインスタンスが作成された場合、これは EditText の新しいインスタンスが作成されたことを意味します。その場合、EditText の最後のイベントを再生できるのは誰ですか?
4

1 に答える 1

1

構成変更中の次の一連のイベントが説明していると思われます。

  1. アクティビティとそのすべてのフラグメントには、現在の状態を onSaveInstanceState() に保存する機会が与えられます。

  2. アクティビティとそのすべてのフラグメントが破棄されます

  3. アクティビティとそのすべてのフラグメントが再度作成されます。

  4. アクティビティとフラグメントの状態が復元されます。明示的にオーバーライドせずに独自のメソッドからonSaveInstanceState()呼び出した場合、これは、Android が s などのウィジェットの状態を復元することを意味します。ごとに、テキストを復元すると、 と が呼び出されます。super.onCreate()onCreate()EditTextEditTextbeforeTextChanged()onTextChanged()

ステップ 3 は「前のイベントの再生」と同じではないことに注意してください。これは、beforeTextChanged()およびへのパラメーターの値がonTextChanged()1 文字以上の変更を示すためです。

于 2013-07-25T16:06:57.553 に答える