我创建了一个简单的评级对话框,扩展了FragmentDialog 。 结果如下: 但我希望获得一个样式的按钮,就像在android中使用的典型对话框中使用的那样 我怎样才能获得这个结果? ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
当我运行该应用程序停止工作时,我编写此代码以显示项目中的时间。 但是,当我删除显示方法程序时,按下按钮时,程序没有任何显示
任何帮助请
这是代码
public class AlarmFragment extends Fragment implements
TimePickerDialog.OnTimeSetListener{
private Button clockBtn;
private TextView time;
public AlarmFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view= inflater.inflate(R.layout.fragment_alarm, container, false);
time = view.findViewById(R.id.alarm_time);
clockBtn= view.findViewById(R.id.clock_btn);
clockBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DialogFragment clock= new TimeClock();
///////////show method /////////
clock.show(getActivity().getSupportFragmentManager(),"Time Picker");
}
});
return view;
}
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
time.setText("Time:" + hourOfDay +" : "+minute);
}}
这是TimeClock片段
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import java.util.Calendar;
public class TimeClock extends DialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
return new TimePickerDialog(getActivity(), (TimePickerDialog.OnTimeSetListener) getActivity(), hour, minute, android.text.format.DateFormat.is24HourFormat(getActivity()));
}
}
编辑:-所以我更改了上面的return语句,然后就可以了。但是AlarmFragment中的onTimeSet方法没有执行,我按如下操作进行了:-
Activity activity = new AlarmFragment().getActivity();
return new TimePickerDialog(getActivity(), (TimePickerDialog.OnTimeSetListener)activity, hour, minute, android.text.format.DateFormat.is24HourFormat(getActivity()));
在承载AlarmFragment
的Activity
中,必须实现TimePickerDialog.OnTimeSetListener
。
例如:
public class MainActivity implements TimePickerDialog.OnTimeSetListener {
...
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
Toast.makeText(this, "chosen hour of day: " + hourOfDay, Toast.LENGTH_LONG).show();
}
}
您正在收到ClassCastException
因为您的getActivity
不是TimePickerDialog.OnTimeSetListener
,但是您的AlarmFragment
是:
// this is where it fails, change this line, do not copy
return new TimePickerDialog(getActivity(), (TimePickerDialog.OnTimeSetListener) getActivity(), hour, minute, android.text.format.DateFormat.is24HourFormat(getActivity()));
您可以重构TimeClock
类以委派侦听器:
public class TimeClock extends DialogFragment {
private TimePickerDialog.OnTimeSetListener listener;
public void setOnTimeSetListener(TimePickerDialog.OnTimeSetListener listener) {
this.listener = listener;
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
// Now delegates the listener to the constructor
return new TimePickerDialog(getActivity(), listener, hour, minute, android.text.format.DateFormat.is24HourFormat(getActivity()));
}
}
并在TimeClock.show
之前设置您的监听器:
DialogFragment clock= new TimeClock();
clock.setOnTimeSetListener(this);
clock.show(getActivity().getSupportFragmentManager(), "Time Picker");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.