2012-01-26 16 views
3

私はカスタムDialogFragmentを使用して、ユーザーがログイン資格情報を変更できるようにしています。いくつかのテキストフィールドと2つのボタン(保存/キャンセル)があります。レイアウトは、DialogFragmentのonCreateViewメソッドで設定されます。AndroidのリセットDialogFragment

ダイアログを開くと、テキストフィールドにはデフォルト値が入力されます。ユーザーがテキストフィールド内のテキストを変更し、キャンセルボタンをクリックすると、ダイアログは閉じられます。次回はダイアログが開き、以前に変更されたテキストフィールドには期待どおりのデフォルト値は含まれていませんが、ユーザが前に変更したテキストが含まれています。テキストフィールドはリセットされません。これはここで述べたのとほぼ同じ問題です。Reset an Android Dialog問題は、提供されるソリューションが、APIレベル11で廃止されたDialogを参照しているため、DialogFragmentでonPrepareDialogを使用できないことです。

DialogFragmentのコンテンツをリセットする同様の方法はありますか?

+0

私は反対の問題があります。なんらかの理由で、私はダイアログが閉じられた後にその内容を保持できません。あなたはどうしたのか説明できますか? – njzk2

答えて

5

次のようにあなたは、DialogFragmetを拡張するクラスでonResume()をオーバーライドすることができます。

private static class MyDialogFragment extends DialogFragment { 
    public static MyDialogFragment newInstance() { 
    // ... 
    } 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
    // ... 
    } 

    @Override 
    public void onResume() { 
    super.onResume(); 
    Dialog dialog = getDialog(); 
    // reset code goes here - use dialog as you would have in onPrepareDialog() 
    } 
} 
0

あなたはまた、負のボタンクリック後の反応として、あなたの活動の.setText()メソッドを使用することができます。例えば:DialogFragment.javaで 、onCreateDialogは(...)AlertDialog.Builder

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
次いで

MainActivity.javaで

//this is better than creating button in layout 
builder.setNegativeButton(R.string.button_cancel, 
    new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int whichButton) { 
      ((MainAct) getActivity()).cancelDialog(DialogFragment.this); 
     } 
    } 
); 

方法cancelDialog(DialogFragmentのDF)を作成{

//here use df to reset text fields 
} 
を定義します