我的应用程序中有一个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无法强制转换为DatePickerFragment $ EditDateDialogListener
我知道这是对话碎片而不是活动,但我怎样才能正确地调用它?得到什么?感谢您的时间。
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!
不会再抛出任何异常。
我解决了这个问题。像这样:在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);
}