我的应用程序中有一个带有日期和时间字段的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!
不会再抛出任何异常。