我的应用程序中有一个带有日期和时间字段的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);
}


并在DialogFragment1中实现EditDateDialogListener:

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无法转换为DatePickerFragment $ EditDateDialogListener

我知道这不是dialogfragment,不是活动,但是如何正确调用它呢?得到什么?
感谢您的时间。

UPD:我的MyFragmentActivity不实现EditDateDialogListener,因为我在那里不需要此Date,而在DialogFragment1中。

public class MyFragmentActivity extends FragmentActivity{

最佳答案

加成


  我的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);
}




原始答案

我假设您正在尝试做《开发人员指南》中的this example之类的事情。

此错误意味着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!


不会再抛出任何异常。

10-06 05:02