【问题标题】:DatePicker crashes when showing a FragmentDatePicker 在显示 Fragment 时崩溃
【发布时间】:2019-02-08 08:04:03
【问题描述】:

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

【问题讨论】:

  • 你确定你是从主线程调用show() 吗? (用户界面线程)。另外,扩展FragmentActivity 而不是Activity
  • 请发布您的 onCreateDialog 方法的代码以及您调用 newFragment.show(getSupportFragmentManager(), "datePicker");的方法;
  • @Sevastyan 我正在扩展 MainActivity,它扩展了 AppCompatActivity。我需要一些导航栏才能工作。
  • 你是怎么打电话给showDatePickerDialog()的? Terms 是当前运行的 Activity 吗?或者它是某种帮助/实用程序类?
  • @MikeM。条款是一个实用类

标签: android datepicker illegalstateexception


【解决方案1】:

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

类似这样的:

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");
}

【讨论】:

  • 在这种情况下,您如何调用该方法?我的意思是问你会传递什么参数?
猜你喜欢
  • 2015-01-03
  • 1970-01-01
  • 1970-01-01
  • 2015-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多