问题描述
我在片段中实现了 TimePickerFragment
。时间选择器打开,我可以选择时间。但是,即使通过 TextView
选择时间后,TimePickerDialog
值也不会更新。 onTimeSet
方法中还有其他函数调用也不起作用。
我已经学习了 this 教程。
这里是 TimePickerFragment
的代码:
public class TimerPickerFragment extends DialogFragment {
@NonNull
@NotNull
@Override
public Dialog onCreateDialog(@Nullable @org.jetbrains.annotations.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) getTargetFragment(),hour,minute,DateFormat.is24HourFormat(getActivity()));
}
}
我在其中调用 TimePickerFragment
的 Fragment 如下:
public class Fragment_alarm extends Fragment implements TimePickerDialog.OnTimeSetListener {
private NotificationHelper mNotificationHelper;
private TextView mTextView;
@Nullable
@org.jetbrains.annotations.Nullable
@Override
public View onCreateView(@NonNull @NotNull LayoutInflater inflater,@Nullable @org.jetbrains.annotations.Nullable ViewGroup container,@Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
((AppCompatActivity) getActivity()).getSupportActionBar().setTitle("Set Alarm");
View view = inflater.inflate(R.layout.fragment_alarm,container,false);
Button buttonTimePicker = view.findViewById(R.id.timeButton);
mTextView = view.findViewById(R.id.time_tv);
buttonTimePicker.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DialogFragment timePicker = new TimerPickerFragment();
timePicker.show(getActivity().getSupportFragmentManager(),"time picker");
}
});
Button buttonCancelAlarm = view.findViewById(R.id.button_cancel);
buttonCancelAlarm.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cancelAlarm();
}
});
return view;
}
@Override
public void onTimeSet(TimePicker view,int hourOfDay,int minute) {
Calendar c = Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY,hourOfDay);
c.set(Calendar.MINUTE,minute);
c.set(Calendar.SECOND,0);
updateTimeText(c);
startAlarm(c);
}
private void updateTimeText(Calendar c) {
String timeText = "Alarm set for: ";
timeText += DateFormat.getTimeInstance(DateFormat.SHORT).format(c.getTime());
mTextView.setText(timeText);
}
private void startAlarm(Calendar c) {
...
}
private void cancelAlarm() {
AlarmManager alarmManager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(getActivity(),AlertReceiver.class);
PendingIntent pendingIntent = PendingIntent.getbroadcast(getActivity(),1,intent,0);
alarmManager.cancel(pendingIntent);
mTextView.setText("Alarm cancelled");
}
}
cancelAlarm
方法按预期正常工作。但是从 onTimeSet
调用的另外两个函数不起作用。
请帮我解决这个问题。 提前致谢。
解决方法
这是我的一个闹钟项目的代码。 只需在按钮的 onClickEvent 触发此方法,希望这对您有用
private void addAlarm(){
final Dialog dialog = new Dialog(getActivity());
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.add_alarm);
final EditText editN = dialog.findViewById(R.id.edittextALARM);
final TextView picktime = dialog.findViewById(R.id.addAlarm_timepick);
picktime.setOnClickListener(v -> {
TimePickerDialog timePickerDialog = new TimePickerDialog(
getActivity(),(view,hourOfDay,minute) -> {
h = hourOfDay;
m = minute;
Calendar calendar = Calendar.getInstance();
calendar.set(0,h,m);a
//this right here maybe the answer u need
picktime.setText(DateFormat.format("hh:mm aa",calendar));
getActiveAlarm();
},12,false
);
timePickerDialog.updateTime(h,m);
timePickerDialog.show();
});