gpt4 book ai didi

java - 时间选择器每分钟执行计划任务,直到达到设定时间,而不是仅在设定时间执行

转载 作者:行者123 更新时间:2023-12-02 02:14:12 25 4
gpt4 key购买 nike

我正在使用一个时间选择器,用户将在其中设置时间,然后在该时间显示一条 toast 消息。问题是每分钟都会显示一次 toast ,直到达到设定的时间。

代码如下:

public class ManualControlsFragment extends Fragment {

private TimePicker tp;
private Calendar calendar;
long pickedTimeInMillis;
long timeDifference;

//some Fragment methods

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.fragment_manual_controls, container, false);

tp = (TimePicker) view.findViewById(R.id.lightTimePickerStart);
tp.setIs24HourView(true);
calendar = Calendar.getInstance();

tp.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
@Override
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {

calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, 0);
pickedTimeInMillis= calendar.getTimeInMillis();
// at this point get the current time
Calendar cal = Calendar.getInstance();
// now calculate the difference as the user actually selected a time
timeDifference = pickedTimeInMillis - cal.getTimeInMillis();

new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
//Do something here
Toast.makeText(getActivity().getApplicationContext(), "Bulb is now on", Toast.LENGTH_LONG).show();
}
}, timeDifference);
}
});

return view;
}

我认为这是因为当我向下滚动选择器以选择分钟时,时间选择器中的 onTimeChangedListener 会每分钟注册一次。假设我必须将时间设置为 14:30,而当前时间选择器上的时间为 14:25,我必须将选择器从 25、26、27、28、29 向下滚动,最后滚动到 30 将其设置为14:30。我认为这就是时间选择器每分钟显示 toast 的原因。我怎样才能解决这个问题?而且,我在处理程序中使用 Looper.getMainLooper()) 因为我还有 4 个其他线程在其他 fragment 的后台运行。

最佳答案

尝试这样的操作,mHandler.removeMessages(0); 如果 hundler 已经在运行,它会停止它,并且最后一个不会停止:

 public class ManualControlsFragment extends Fragment {
private TimePicker tp;
private Calendar calendar;
long pickedTimeInMillis;
long timeDifference;
//some Fragment methods
Handler mHandler = new Handler(Looper.getMainLooper());

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_manual_controls, container, false);
tp = (TimePicker) view.findViewById(R.id.lightTimePickerStart);
tp.setIs24HourView(true);
calendar = Calendar.getInstance();
tp.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
@Override
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, 0);
pickedTimeInMillis = calendar.getTimeInMillis();
// at this point get the current time
Calendar cal = Calendar.getInstance();
// now calculate the difference as the user actually selected a time
timeDifference = pickedTimeInMillis - cal.getTimeInMillis();
mHandler.removeMessages(0);
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
//Do something here
Toast.makeText(getActivity().getApplicationContext(), "Bulb is now on", Toast.LENGTH_LONG).show();
}
}, timeDifference);
}
});
return view;
}
}

关于java - 时间选择器每分钟执行计划任务,直到达到设定时间,而不是仅在设定时间执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49520616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com