旋转时调用DatePickerDialog onDateSet

jfo*_*ato 8 android android-lifecycle android-fragments

我正在使用DialogFragment在onCreateDialog()中返回DatePickerDialog.我已将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();
    }

}
Run Code Online (Sandbox Code Playgroud)

这就是我所说的

if(getActivity()!=null){
    FragmentManager fm = getActivity().getSupportFragmentManager();
    DialogFragment newFragment = DateDialogFragment.newInstance();
    newFragment.show(fm, "dialog");
}
Run Code Online (Sandbox Code Playgroud)

Man*_*ani 9

onDateSet方法中,Activity使用Activity :: isChangingConfigurations检查是否由于配置更改而重新启动.如果是,则不显示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();
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经测试过并且完美无缺.如果需要任何进一步的帮助,请告诉我.


Ril*_*n42 -1

当屏幕旋转时,活动被销毁并重新创建,这每次都会创建一个新的片段。避免此问题的一种方法是更改​​代码中 if(getActivity()!=null) 语句的位置。将其放置在不受活动重新创建影响的位置(不在 OnCreate 方法中)。