1

我的应用程序中有一个 DialogFragment1(由 MyFragmentActivity 调用),带有日期和时间字段。当用户单击它们时,会出现 DatePickerFragment 和 TimePickerFragment。它们还扩展了 DialogFragments。我想像往常一样将它们的值返回到 DailogFragment1:

public void onDateSet(DatePicker view, int year, int month, int day) {
        EditDateDialogListener activity = (EditDateDialogListener) getActivity();
        activity.onFinishDateDialog(day, month, year);

}

(在我照常实施之前)

public interface EditDateDialogListener{
void onFinishDateDialog(int day, int month,int year);
}

在实现 EditDateDialogListener 的 DialogFragment1 中:

public void onFinishDateDialog(int day, int month, int year){
this.mDay=day;
this.mMonth=month;
this.mYear=year;
updateDateDisplay();

但是我有一个运行时错误 12-01 20:03:52.018: E/AndroidRuntime(756): java.lang.ClassCastException: MyFragmentActivity cannot be cast to DatePickerFragment$EditDateDialogListener

我知道这是对话片段而不是活动,但是我怎样才能以正确的方式调用它?得到什么?感谢您的时间。

UPD:我的 MyFragmentActivity 没有实现 EditDateDialogListener,因为我不需要这个日期,而是在 DialogFragment1 中。

public class MyFragmentActivity extends FragmentActivity{
4

2 回答 2

2

添加

我的 MyFragmentActivity 没有实现 EditDateDialogListener,因为我在那里不需要这个 Date,而是在 DialogFragment1 中。

我懂了。然后 DailogFragment1 必须实现如下所述的 EditDateDialogListener 并且您需要更改onDateSet()为使用getParentFragment()

public void onDateSet(DatePicker view, int year, int month, int day) {
    EditDateDialogListener listener = (EditDateDialogListener) getParentFragment();
    listener.onFinishDateDialog(day, month, year);
}

原始答案

我假设您正在尝试在开发人员指南中执行类似此示例的操作。

这个错误意味着MyFragmentActivity没有实现你的自定义EditDateDialogListener。简单地改变这个:

public class MyFragementActivity extends FragmentActivity {

对此:

public class MyFragementActivity extends FragmentActivity implements EditDateDialogListener {
//                                             Add this:  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

并覆盖你的听众的onFinishDateDialog()回调。


一起改变MyFragmentActivity

public class MyFragementActivity extends FragmentActivity implements EditDateDialogListener {
    @Override
    public void onFinishDateDialog(int day, int month, int year) {
        // Do something
    }
    // The rest of your MyFragmentActivity code here
}

随着这一行上方的变化DatePickerFragment

EditDateDialogListener activity = (EditDateDialogListener) getActivity();  // It works!

不会再抛出任何异常。

于 2012-12-01T20:32:14.197 回答
1

我解决了这个问题。像这样:在 MyFragmentActivity 有一个标签:

DialogFragment dlg = MyFragmentActivity.newInstance(p1,p11, p2, p3);
dlg.show(getSupportFragmentManager(), "DataFragmentTag");

在 DatePickerFragment 中:

public void onDateSet(DatePicker view, int year, int month, int day) {

    EditDateDialogListener handler = (EditDateDialogListener) getActivity().getSupportFragmentManager().findFragmentByTag("DataFragmentTag");
    handler.onFinishDateDialog(day, month, year);
}
于 2012-12-02T08:31:40.867 回答