显示片段时 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");
}
我正在尝试使用此处文档示例中的日期选择器小部件: 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");
}