显示片段时 DatePicker 崩溃

DatePicker crashes when showing a Fragment

我正在尝试使用此处文档示例中的日期选择器小部件: docs

但是当我调用 newFragment.show(getSupportFragmentManager(), "datePicker");

应用程序崩溃,堆栈跟踪显示如下:

FATAL EXCEPTION: main Process: com.wgu.andrey.clp1, PID: 8125
                                                               java.lang.IllegalStateException: Activity has been destroyed
                                                                   at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1864)
                                                                   at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:650)
                                                                   at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:609)
                                                                   at android.support.v4.app.DialogFragment.show(DialogFragment.java:143)
                                                                   at com.wgu.andrey.clp1.Terms.showDatePickerDialog(Terms.java:67)

DatePickerFragment.java

public class DatePickerFragment extends DialogFragment
    implements DatePickerDialog.OnDateSetListener {

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    // Use the current date as the default date in the picker
    final Calendar c = Calendar.getInstance();
    int year = c.get(Calendar.YEAR);
    int month = c.get(Calendar.MONTH);
    int day = c.get(Calendar.DAY_OF_MONTH);

    // Create a new instance of DatePickerDialog and return it
    return new DatePickerDialog(getActivity(), this, year, month, day);
}

public void onDateSet(DatePicker view, int year, int month, int day) {
    // Do something with the date chosen by the user
}

}

Terms.java

public void showDatePickerDialog(View v) {
    DialogFragment newFragment = new DatePickerFragment();
    newFragment.show(getSupportFragmentManager(), "datePicker");
}

与@Mike 所说的相同,术语 class 不能是 activity 的子 class。将该方法移动到它自己的实用程序 class,然后通过传递上下文或传递片段管理器来调用该方法。

像这样:

public void showDatePickerDialog(View v, AppCompatActivity context) {
        DialogFragment newFragment = new DialogFragment();
        newFragment.show(context.getSupportFragmentManager(), "TAG");
}

或者,使用 FragmentManager

public void showDatePickerDialog(View v, FragmentManager fm) {
        DialogFragment newFragment = new DialogFragment();
        newFragment.show(fm, "datePicker");
}