java - 单击 Fragment 中的按钮以显示 TimePickerDialog 时应用程序崩溃
问题描述
我正在尝试在片段中显示 TimePickerDialog。单击按钮时,不会出现 TimePickerDialog 并且应用程序崩溃。logcat 中有一个类转换问题。
警报片段类:
public class AlarmFragment extends Fragment implements TimePickerDialog.OnTimeSetListener {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View alarmView = inflater.inflate(R.layout.fragment_alarm, container, false);
Button button = (Button) alarmView.findViewById(R.id.end_button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DialogFragment timePicker = new TimePickerFragment();
timePicker.show(getActivity().getSupportFragmentManager(), "time picker");
}
});
return alarmView;
}
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
TextView textView = (TextView) getActivity().findViewById(R.id.time_textView);
textView.setText("Hour: " + hourOfDay + " Minute: " + minute);
}
}
TimePickerFragment 类:
public class TimePickerFragment extends DialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
TimePickerDialog timePickerDialog = new TimePickerDialog(getActivity(), (TimePickerDialog.OnTimeSetListener) getActivity(), hour, minute, DateFormat.is24HourFormat(getActivity()));
return timePickerDialog;
}
}
logcat 中的错误消息:
2019-07-22 18:07:49.104 4872-4872/mapp.com.sg.thesleepingsheep E/AndroidRuntime: FATAL EXCEPTION: main
Process: mapp.com.sg.thesleepingsheep, PID: 4872
java.lang.ClassCastException: mapp.com.sg.thesleepingsheep.MainActivity cannot be cast to android.app.TimePickerDialog$OnTimeSetListener
at mapp.com.sg.thesleepingsheep.TimePickerFragment.onCreateDialog(TimePickerFragment.java:21)
at android.support.v4.app.DialogFragment.onGetLayoutInflater(DialogFragment.java:330)
at android.support.v4.app.Fragment.performGetLayoutInflater(Fragment.java:1308)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1460)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:802)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:733)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
解决方案
您的MainActivity
类必须实现TimePickerDialog.OnTimeSetListener
才能使用:(TimePickerDialog.OnTimeSetListener) getActivity()
推荐阅读
- javascript - Wordpress 中的 Javascript
- sql - 如何跟踪 PostgreSQL 中的顶级文件夹?
- c# - 从 Azure Identity 获取用户名
- google-analytics - 退出率可以低于跳出率吗
- asp.net-core - 导航到任何页面后要运行的 Blazor 中间件
- ios - 分组的 UITableView 对于行动画来说太透明了
- python - 如何计算.txt文件中给定的两点之间的距离?
- java - 在 exo player android 中播放 youtube 视频时出错
- caching - Gitlab CI - 如果缓存存在,如何跳过作业
- javascript - 如何在 elementor post 小部件中添加 swiper 幻灯片