我有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
我是相当新的,所以请在回答我的问题时尽量让它变得容易理解。 在此先感谢大家!
答案 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) {
...
}}