gpt4 book ai didi

java - 从 DialogFragment 调用 DialogFragment,getActivity() 中的 ClassCastException

转载 作者:行者123 更新时间:2023-11-29 05:51:39 26 4
gpt4 key购买 nike

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

我知道这是 dialogfragment 而不是 Activity ,但我怎样才能正确调用它?得到什么?感谢您的宝贵时间。

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

public class MyFragmentActivity extends FragmentActivity{

最佳答案

加法

my MyFragmentActivity do not implement EditDateDialogListener, because I do not need this Date there, but in 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!

不会再抛出任何异常。

关于java - 从 DialogFragment 调用 DialogFragment,getActivity() 中的 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13663391/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com