java - 当我有 MyCustomClass 扩展 DialogFragment 时如何实现 onDatePickerChanged

标签 java android datepickerdialog

我有一个名为 DatePicker 的自定义类,它扩展了 DialogFragment 并实现了 DatePickerDialog.OnDateSetListener,但我的问题是因为您需要监听onDateChangeMethodDialogFragment 只有 DialogInterface.OnCancelListenerDialogInterface.OnDismissListener

我怎样才能做到这一点?我尝试实现 OnDateChangedListener 并重写 onDateChange 方法,但它不起作用。这是代码:

public class DatePicker extends DialogFragment implements
        DatePickerDialog.OnDateSetListener, OnDateChangedListener {

    private OnDateSetListener _onDateSetListener;

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        _onDateSetListener = (OnDateSetListener) activity;
    }


    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Date initialValue = null;
        String[] buttons = getArguments().getStringArray("buttons");

        Long initialValueLong = getArguments().getLong("initialValue");
        if (initialValue == null) {
            initialValue = new Date();
        }

        Calendar calendar = GregorianCalendar.getInstance();
        calendar.setTimeInMillis(initialValueLong);

        DatePickerDialog dialog = new DatePickerDialog(getActivity(), this,
                calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH),
                calendar.get(Calendar.DATE));


        return dialog;
    }

     @Override
     public void onDateSet(android.widget.DatePicker view, int year,
           int monthOfYear, int dayOfMonth) {
           _onDateSetListener.onDateSet(new GregorianCalendar(year, monthOfYear,
               dayOfMonth).getTime(), getArguments().get("tag"));
     }

    @Override
    public void onDateChanged(android.widget.DatePicker view, int year,
            int monthOfYear, int dayOfMonth) {

        // THIS METHOD NEVER CALLED

    }
}

最佳答案

您似乎尚未在类中声明 onDateSetListener,并且您还将主机 Activity 转换为错误的类型。 Dialog 类本身应该是 OnDateSetListener,并且主机 Activity 应该转换为其他内容。

尝试像这样构造类:

public class DatePickerDialogFragment extends DialogFragment implements 
                                             DatePickerDialog.OnDateSetListener
{
    public static interface DatePickedListener
    {
        public void onDatePicked(int selectedYear, int selectedMonth, int selectedDay);
    }

    private DatePickedListener listener;        

    @Override
    public void onAttach(Activity activity)
    {
        // when the fragment is initially attached to the activity, cast the
        // activity to the callback interface type
        super.onAttach(activity);

        try
        {
            listener = (DatePickedListener) activity;
        }
        catch (ClassCastException e)
        {
            throw new ClassCastException(activity.toString() + " must implement " + DatePickedListener.class.getName());
        }
    }


    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState)
    {
        Bundle b = getArguments();

        int year = b.getInt("set_year");
        int month = b.getInt("set_month");
        int day = b.getInt("set_day");

        return new DatePickerDialog(getActivity(), this, year, month, day); 
    }


    @Override
    public void onDateSet(DatePicker view, int setYear, int setMonth, int setDay)
    {
        // when the date is selected, send it to the activity via its callback interface method

        listener.onDatePicked(setYear, setMonth, setDay);
    }           
}  

关于java - 当我有 MyCustomClass 扩展 DialogFragment 时如何实现 onDatePickerChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24738890/

相关文章:

java - BufferedImage 对象的高内存消耗

java - 使用 Google AppEngine 作为个人网站(wordpress 博客、wiki)的 "cache"

android - android 布局上的简单 trans 动画第二次不起作用

安卓日期选择器

android - 如何将 DatePicker 对话框的背景颜色从默认的白色更改?

Android 日期选择器和时间选择器问题

java - Spring Boot、AWS 应用程序上的 Jackson 数据绑定(bind)依赖项错误

java - IntelliJ - lambda 表达式 { 换行大括号?

java - 锁屏上的透明对话框可回复 Whatsapp 等消息

android - 如何在 Android 中使用 key 计算字符串的 SHA-256 哈希值?