1

たとえば、バンドルインスタンスを使用して、ダイアログの状態を保存する方法に関するトピックをたくさん見つけました。ただし、ダイアログを「適切に」リセットする方法が見つからないようです。

このサンプルカスタムダイアログについて考えてみます(XMLレイアウトにはID「input_text」のEditTextが含まれています)。

public class CustomDialog extends Dialog {
  public CustomDialog (Context context) { super (context); }

  protected onCreate (Bundle savedInstanceState) {
    super.onCreate (savedInstanceState);

    setContentView(R.layout.input_query);
    EditText txt = (EditText) findViewById(R.id.input_text);

    // Consider that I'm declaring here the use of listeners
    // in order to retrieve input text.
  }
}

メインのアクティビティでボタンがクリックされると、このダイアログがポップアップ表示されます。このアクションが2回目に発生すると、EditTextに前のインスタンスからの入力が含まれます。

これで、このEditTextのコンテンツをリセットできることがわかりましたが、ダイアログ全体でこれを行うための一般的な既存のメソッドがあるかどうか疑問に思っています。たとえば、より複雑なダイアログがある場合、このオブジェクトがインスタンス化されるたびに「デフォルト」値を設定する必要があります。の呼び出しを削除することでうまくいくと思いましたsuper.onCreate(savedInstanceState);が、そうではありません。

これがばかげた質問である場合(またはすでに対処されている場合...私はそれを見つけられませんでした)...どんな助けでもありがたいです。どうもありがとう!

4

2 に答える 2

5

通常、アクティビティのメソッドをオーバーライドする必要がonCreateDialogあります。onPrepareDialog

初めてダイアログの作成onCreateDialogが呼び出されるので、このメソッドでダイアログを作成する必要があります。ダイアログオーバーライドの内容を初期化/更新するためにonPrepareDialog、ダイアログを表示する前に常に呼び出されます。

于 2011-09-20T11:41:16.380 に答える
1

showDialog()の反対のメソッドを使用してみてください-removeDialog()はそのメソッドです。私はあなたと同じような問題を抱えていました。私が示していたすべてのダイアログには、最初のインスタンスからのデータが含まれていました。removeDialog()を使い始めたとき、コンテンツは適切に更新されていました。

于 2011-09-20T11:33:03.590 に答える