8

onCreateDialog() で DatePickerDialog を返すために DialogFragment を使用しています。dateSetListener を DialogFragment (以下の例では「this」) に設定しましたが、画面の回転が発生したときに onDateSet() が呼び出されることを除いてすべてが機能しますが、これは望ましくありません。画面が回転したときに onDateSet が呼び出されないようにするにはどうすればよいですか?

私のDialogFragment

public static class DateDialogFragment extends DialogFragment implements
DatePickerDialog.OnDateSetListener{

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

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        return new DatePickerDialog(getActivity(), this, 2012, 11, 19);
    }

    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear,
        int dayOfMonth) {
        //This is called when screen rotated, which I dont want
        Toast.makeText(getActivity(), "Year: "+year+" Month: "+monthOfYear+" Day: "+dayOfMonth, Toast.LENGTH_SHORT).show();
    }

}

そして、これは私がそれを呼ぶ方法です

if(getActivity()!=null){
    FragmentManager fm = getActivity().getSupportFragmentManager();
    DialogFragment newFragment = DateDialogFragment.newInstance();
    newFragment.show(fm, "dialog");
}
4

6 に答える 6

9

onDateSetメソッドでは、 Activity::isChangingConfigurations を使用して、構成変更によって が再起動されているかどうかを確認Activityます。はいの場合は、表示しないでください。Toast

@Override
public void onDateSet(android.widget.DatePicker view, int year, int monthOfYear, int dayOfMonth) {
    if( ! this.getActivity().isChangingConfigurations() ) {
        // Dialog is dismissed by user explicitly, hence show the Toast message.       
        Toast.makeText(getActivity(), "Year: "+year+" Month: "+monthOfYear+" Day: "+dayOfMonth, Toast.LENGTH_SHORT).show();
    }
}

私はそれをテストし、完全に動作します。さらにサポートが必要な場合はお知らせください。

于 2014-04-24T13:55:00.350 に答える
1

ラインを交換してみる

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
         return new DatePickerDialog(getActivity(), this, 2012, 11, 19);
    }

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
     super.onCreateDialog(savedInstanceState);
 }
于 2014-04-29T18:32:35.450 に答える
-1

画面が回転すると、アクティビティが破棄されて再作成され、そのたびに新しいフラグメントが作成されます。この問題を回避する 1 つの方法は、コード内の if(getActivity()!=null) ステートメントの配置を変更することです。アクティビティの再作成の影響を受けない場所に配置します (OnCreate メソッド内ではありません)。

于 2012-12-19T19:23:55.407 に答える