类转换异常检索从子碎片中选择的日期以显示在父碎片

时间:2018-05-01 14:38:10

标签: android android-fragments android-nested-fragment

我有parentfragment名为Planning,其中我想要显示名为DialogFragment的{​​{1}}。DatePickerfragment有一个DatePickerFragment点击后,将为用户显示button。用户选择日期,该日期应传递到名为' date'的文本视图中的datepicker

不幸的是,每当我点击Parent Fragment应用程序崩溃时都会出现此错误:

button

我知道错误在哪里,但我不知道如何修复它。 它引用了java.lang.ClassCastException: com.example.android.meat_timealpha10.Activities.MainActivity cannot be cast to android.app.DatePickerDialog$OnDateSetListener at com.example.android.meat_timealpha10.Fragments.DatePickerFragment.onCreateDialog(DatePickerFragment.java:29)

中的这一行
DatePickerDialogFragment

事情是我关注了YouTube视频,这家伙似乎没有任何问题。然后,他并没有像我一样使用return new DatePickerDialog(getActivity(), (DatePickerDialog.OnDateSetListener)getActivity(), year, month, day ); 。 有谁知道如何解决该错误,以便所选日期显示在nested fragments

这是我的代码:

textview

XML

parent fragment

以下是<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".Fragments.planning"> <Button android:id="@+id/chooseDate" style="@style/Widget.AppCompat.Button.Borderless.Colored" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginBottom="5dp" android:elevation="0dp" android:hint="touch here to select date" android:textSize="20sp" /> <TextView android:id="@+id/date" android:layout_width="match_parent" android:layout_height="30dp" android:textColor="@color/blue" /> </LinearLayout>

Child Fragment DatePickerFragment

package com.example.android.meat_timealpha10.Fragments; import android.app.DatePickerDialog; import android.app.Dialog; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.DialogFragment; import android.widget.DatePicker; import android.widget.TextView; import com.example.android.meat_timealpha10.R; import org.w3c.dom.Text; import java.text.DateFormat; import java.util.Calendar; public class DatePickerFragment extends DialogFragment { public String dateHolder; @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Calendar c = Calendar.getInstance(); int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH); int day = c.get(Calendar.DAY_OF_MONTH); return new DatePickerDialog(getActivity(), (DatePickerDialog.OnDateSetListener)getActivity(), year, month, day ); } } 代码(没有导入)

parent fragment

我是相当新的,所以请在回答我的问题时尽量让它变得容易理解。 在此先感谢大家!

1 个答案:

答案 0 :(得分:0)

如它的建议,你不能将活动转换为监听器,错误发生在这一行:(DatePickerDialog.OnDateSetListener)getActivity()。

您需要在片段中实现 DatePickerDialog.OnDateSetListener 并覆盖 onDateSet 函数:

public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    ...
    return new DatePickerDialog(getActivity(), this, year, month, day);
}  

@Override
public void onDateSet(DatePicker view, int year, int month, int day) {
    ...        
}}