【问题标题】:App force closes during displaying custom time picker显示自定义时间选择器期间应用强制关闭
【发布时间】:2015-01-10 05:48:36
【问题描述】:

我正在使用this 库在我的应用程序中使用自定义时间选择器。 TimePickerDialog 类的相关代码如下:

public static TimePickerDialog newInstance(OnTimeSetListener callback,
    int hourOfDay, int minute, boolean is24HourMode) {
TimePickerDialog ret = new TimePickerDialog();
ret.initialize(callback, hourOfDay, minute, is24HourMode);
return ret;
}

在我的活动中,我使用此代码来实现:

com.android.datetimepicker.time.TimePickerDialog dialog = new        com.android.datetimepicker.time.TimePickerDialog();
dialog.newInstance((OnTimeSetListener) mTimeSetListener, getHour, getMinute, true);
FragmentManager fragmentManager;
fragmentManager = getSupportFragmentManager();
dialog.show(fragmentManager, "timepicker");

但是当我启动应用程序时,我会因为以下错误而强制关闭:

01-10 11:08:29.781 8727-8727/com.example.unplugged E/AndroidRuntime﹕ FATAL EXCEPTION: main java.lang.ClassCastException: com.example.unplugged.MainActivity$1 cannot be cast to com.android.datetimepicker.time.TimePickerDialog$OnTimeSetListener at com.example.unplugged.MainActivity.onClick(MainActivity.java:48) at android.view.View.performClick(View.java:4249) at android.view.View$PerformClick.run(View.java:17764) at android.os.Handler.handleCallback(Handler.java:730) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:5162) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:756) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:572) at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132) at dalvik.system.NativeStart.main(Native Method)

有什么建议吗?

编辑:回调方法:

private TimePickerDialog.OnTimeSetListener mTimeSetListener = new TimePickerDialog.OnTimeSetListener()
{

    @Override
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        setHour = hourOfDay;
        setMinute = minute;
    }
};

【问题讨论】:

  • 你是如何初始化mTimeSetListener的?
  • 第 48 行有什么代码? MainActivity.java:48 ?您必须对您的活动实施TimePickerDialog.OnTimeSetListener。如果已经存在,请检查您的导入并查看您导入了哪个 OnTimeSetListener
  • 看看我的回答,它会做的工作。
  • 无需转换,只需使用mTimeSetListener 而不是(OnTimeSetListener) mTimeSetListener 作为dialog.newInstance 中的参数

标签: android dialog android-alertdialog timepicker forceclose


【解决方案1】:

您必须使用android.app.TimePickerDialog.OnTimeSetListener

改变

dialog.newInstance((OnTimeSetListener) mTimeSetListener, getHour, getMinute, true);

dialog.newInstance(new com.android.datetimepicker.time.TimePickerDialog.OnTimeSetListener()
{
    @Override
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        setHour = hourOfDay;
        setMinute = minute;
    }
}, getHour, getMinute, true);

【讨论】:

  • 您可以简单地将导入更新为com.android.datetimepicker.time.TimePickerDialog.OnTimeSetListener。那也行。
猜你喜欢
  • 2012-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-17
相关资源
最近更新 更多