【问题标题】:cannot be cast to android.app.DatePickerDialog$OnDateSetListener无法转换为 android.app.DatePickerDialog$OnDateSetListener
【发布时间】:2014-09-30 16:21:04
【问题描述】:

在我的应用程序中单击按钮时意外遇到以下错误:

 cannot be cast to android.app.DatePickerDialog$OnDateSetListener

发生的情况如下 - 用户单击一个名为“btnCalendar”的按钮,然后显示一个日历

btnCalendar.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View arg0) {

        DialogP dcal = new  DialogP();
       dcal.show(ScheduleMatchOptionActivity.this.getFragmentManager(),"MyDialog");
    }
});

下面是DialogP类

public class DialogP extends DialogFragment {

    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current date as the default date in the picker
        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH); 


        //  Create a new instance of DatePickerDialog and return it
        DatePickerDialog dialog = new DatePickerDialog(getActivity(), (OnDateSetListener) this, year, month,day);
        Log.i("onCreateDialog", "onCreateDialog : MinDate() : "+new Date().getTime());

        Calendar cal=new GregorianCalendar();

        //min date
        dialog.getDatePicker().setMinDate(cal.getTime().getTime()-1000);
        Log.i("onCreateDialog", "onCreateDialog : MinDate() : "+cal.getTime());

        //max date .... added 30 days from currunt date
        cal.add(Calendar.DATE, 30);
        Date dte =cal.getTime();
        dialog.getDatePicker().setMaxDate(dte.getTime());
        Log.i("onCreateDialog", "onCreateDialog : MaxDate() : "+dte);

        //customizing calendar view
        dialog.getDatePicker().setCalendarViewShown(true);
        dialog.getDatePicker().setSpinnersShown(false);
        dialog.getDatePicker().getCalendarView().setShowWeekNumber(false);
        dialog.setCancelable(true);

        Log.i("Date", "date : "+System.currentTimeMillis());
        return dialog;
    }
}

下面是日志猫消息

 09-30 16:12:00.805: E/AndroidRuntime(1415): FATAL EXCEPTION: main
    09-30 16:12:00.805: E/AndroidRuntime(1415): java.lang.ClassCastException: com.dooba.beta.DialogP cannot be cast to android.app.DatePickerDialog$OnDateSetListener
    09-30 16:12:00.805: E/AndroidRuntime(1415):     at com.dooba.beta.DialogP.onCreateDialog(DialogP.java:25)
    09-30 16:12:00.805: E/AndroidRuntime(1415):     at android.app.DialogFragment.getLayoutInflater(DialogFragment.java:398)
    09-30 16:12:00.805: E/AndroidRuntime(1415):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:885)
    09-30 16:12:00.805: E/AndroidRuntime(1415):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1057)
    09-30 16:12:00.805: E/AndroidRuntime(1415):     at android.app.BackStackRecord.run(BackStackRecord.java:682)
    09-30 16:12:00.805: E/AndroidRuntime(1415):     at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1435)
    09-30 16:12:00.805: E/AndroidRuntime(1415):     at android.app.FragmentManagerImpl$1.run(FragmentManager.java:441)
    09-30 16:12:00.805: E/AndroidRuntime(1415):     at android.os.Handler.handleCallback(Handler.java:730)
    09-30 16:12:00.805: E/AndroidRuntime(1415):     at android.os.Handler.dispatchMessage(Handler.java:92)
    09-30 16:12:00.805: E/AndroidRuntime(1415):     at android.os.Looper.loop(Looper.java:137)
    09-30 16:12:00.805: E/AndroidRuntime(1415):     at android.app.ActivityThread.main(ActivityThread.java:5103)
    09-30 16:12:00.805: E/AndroidRuntime(1415):     at java.lang.reflect.Method.invokeNative(Native Method)
    09-30 16:12:00.805: E/AndroidRuntime(1415):     at java.lang.reflect.Method.invoke(Method.java:525)
    09-30 16:12:00.805: E/AndroidRuntime(1415):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
    09-30 16:12:00.805: E/AndroidRuntime(1415):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    09-30 16:12:00.805: E/AndroidRuntime(1415):     at dalvik.system.NativeStart.main(Native Method)

第 25 行如下:

DatePickerDialog dialog = new DatePickerDialog(getActivity(), (OnDateSetListener) this, year, month,day);

之前我在

 DatePickerDialog dialog = new DatePickerDialog(getActivity(), this, year, month,day); 

但收到以下错误“构造函数 DatePickerDialog(Activity, DialogP, int, int, int) 未定义”所以我将其转换。

另一个相关问题我想检索日期集并将其转换为显示给用户的名为 txtDate 的文本视图。我对 settext 很熟悉,但有点困惑。

任何帮助将不胜感激。提前致谢

更新:

cal.add(日历.DATE, 7); 如果数字小于 12 则发生以下错误:

ALL i want to do is to limit the calendar to one week
    09-30 16:39:07.217: E/AndroidRuntime(2410): FATAL EXCEPTION: main
    09-30 16:39:07.217: E/AndroidRuntime(2410): java.lang.NullPointerException
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.widget.CalendarView.onScroll(CalendarView.java:1214)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.widget.CalendarView.access$900(CalendarView.java:76)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.widget.CalendarView$2.onScroll(CalendarView.java:1075)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.widget.AbsListView.invokeOnItemScrollListener(AbsListView.java:1340)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.widget.ListView.layoutChildren(ListView.java:1762)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.widget.AbsListView.onLayout(AbsListView.java:2012)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.view.View.layout(View.java:14289)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.view.View.layout(View.java:14289)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.view.View.layout(View.java:14289)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.view.ViewGroup.layout(ViewGroup.java:4562)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1660)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.widget.LinearLayout.onLayout(LinearLayout.java:1436)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.view.View.layout(View.java:14289)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.view.ViewGroup.layout(ViewGroup.java:4562)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.view.View.layout(View.java:14289)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.view.ViewGroup.layout(ViewGroup.java:4562)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.view.View.layout(View.java:14289)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.view.ViewGroup.layout(ViewGroup.java:4562)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.view.View.layout(View.java:14289)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.view.ViewGroup.layout(ViewGroup.java:4562)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.view.View.layout(View.java:14289)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.view.ViewGroup.layout(ViewGroup.java:4562)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.view.View.layout(View.java:14289)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.view.ViewGroup.layout(ViewGroup.java:4562)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.view.View.layout(View.java:14289)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.view.ViewGroup.layout(ViewGroup.java:4562)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.view.View.layout(View.java:14289)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.view.ViewGroup.layout(ViewGroup.java:4562)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1730)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1004)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5481)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.view.Choreographer.doCallbacks(Choreographer.java:562)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.view.Choreographer.doFrame(Choreographer.java:532)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.os.Handler.dispatchMessage(Handler.java:92)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.os.Looper.loop(Looper.java:137)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at android.app.ActivityThread.main(ActivityThread.java:5103)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at java.lang.reflect.Method.invokeNative(Native Method)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at java.lang.reflect.Method.invoke(Method.java:525)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    09-30 16:39:07.217: E/AndroidRuntime(2410):     at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

    标签: java android android-layout android-activity android-fragments


    【解决方案1】:

    确保您在ScheduleMatchOptionActivity Activity 中实现OnDateSetListener

    public class ScheduleMatchOptionActivity extends FragmentActivity 
              implements DatePickerDialog.OnDateSetListener {
    ....you code here..
    }
    

    而不是将getActivity() 转换为OnDateSetListener 转换为ScheduleMatchOptionActivity,因为您在ScheduleMatchOptionActivity 中实现OnDateSetListener 接口:

    DatePickerDialog dialog = new DatePickerDialog(getActivity(), 
                        (ScheduleMatchOptionActivity)getActivity(), year, month,day);
    

    【讨论】:

    • 感谢您的建议。不幸的是,我遇到了另一个小问题,我将其包含在我最初帖子的更新部分中。
    猜你喜欢
    • 2022-10-04
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    • 2016-06-30
    • 2016-01-14
    • 2013-07-25
    • 2016-07-05
    • 2017-01-24
    相关资源
    最近更新 更多