onTimeSetListener 中的 OnTimeSet 不起作用

问题描述

我在片段中实现了 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();
    });

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...