3

onCreateDialogメソッドからAlertDialogを構築して返すDialogFragmentを作成しました。AlertDialog には、2 つの EditText ビューが含まれています。

これら 2 つの編集テキストの初期値をonCreateDialogメソッドで設定しています。これは、電話を回転させてonCreateDialogが呼び出されるため、すべての変更が失われるか、初期値に復元されるまでうまく機能します。

だから私の質問は、最初にダイアログを開いたときにのみ設定されるように、初期値をどこに配置する必要があるかということです。

以下に、コードの簡略化されたバージョンを貼り付けました。解決策の 1 つは、newInstance() メソッドでクラス属性を初期化することですが、その後、それらを静的にする必要があります。他の解決策は Bundle を介して値を渡すことですが、パラメータの型として Calendar を取る put-method はありません。

ベストプラクティスとは?

public class MyDialogFragment extends DialogFragment implements OnClickListener, OnDateSetListener, OnQuantitySetListener 
{
private EditText editText1, editText2
private MyObject myObject;


public static MyDialogFragment newInstance() 
{
    return new MyDialogFragment ();
}


@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    LayoutInflater factory = LayoutInflater.from(getActivity());
    final View v = factory.inflate(R.layout.my_layout, null);

    editText1 = (EditText) v.findViewById(R.id.text1);
    editText2 = (EditText) v.findViewById(R.id.text2);

    myObject = <get the object from database>;

    editText1.setText(myObject.attribute1);
    editText2.setText(myObject.attribute2);


    bindDataToViews();

    return new AlertDialog.Builder(getActivity())
            .setIconAttribute(R.drawable.add)
            .setTitle("Title of the dialog")
            .setView(v)).create();
}

... other methods using getting the values from EditText and putting them back to MyObject

}

4

2 に答える 2

2

CalendarSerializableそのように入れることができるようになっていますBundle

于 2012-08-13T20:46:43.290 に答える
-1

データを onSaveInstanceState(Bundle outState) メソッドに保存し、 onRestoreInstanceState() メソッドで再度読み取ることができます。画面の回転前に onSaveInstanceState が呼び出され、変更後に onRestoreInstanceState() が呼び出されます。これは、向きの変更の間にデータを保存するのに適した場所です。

または、マニフェスト ファイルに追加することもできます

android:configChanges="orientation"

この値を alertDialog を含む activity に追加します。

于 2012-08-13T20:46:12.573 に答える