[英]Cancel A CountDownTimer Android Java
我在時間選擇器對話框中有一個倒數計時器。 我的課用三個頁面擴展Fragment-視圖。
當我的情況為0時,我選擇了時間選擇器CountdownTimer,一切都非常完美。 當我遇到第一種情況時,我想取消我的時間,當我單擊一個按鈕時,什么也沒發生。
只有當我的情況是0並像下面的timer.start()一樣開始我的時間時; 當我單擊timer.cancel()時,它起作用 我希望有人幫助我。
我的片段
public static class PlaceholderFragment extends Fragment {
/**
* The fragment argument representing the section number for this
* fragment.
*/
private CountDownTimer timer;
public PlaceholderFragment() {
}
public static PlaceholderFragment newInstance(int sectionNumber) {
PlaceholderFragment fragment = new PlaceholderFragment();
Bundle args = new Bundle();
args.putInt(ARG_SECTION_NUMBER, sectionNumber);
fragment.setArguments(args);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
//TextView textView = (TextView) rootView.findViewById(R.id.section_label);
//textView.setText(getArguments().getInt(ARG_SECTION_NUMBER));
//togglebutton.setChecked(false);
text1=(TextView) rootView.findViewById(R.id.textView1);
//textAlarmPrompt = (TextView) rootView.findViewById(R.id.textView1);
textViewTime = (TextView) rootView.findViewById(R.id.textView1);
buttonstartSetDialog = (Button) rootView.findViewById(R.id.btn1);
buttonstartSetDialog.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//textAlarmPrompt.setText("");
openTimePickerDialog(true);
}
});
switch (getArguments().getInt(ARG_SECTION_NUMBER)) {
case 0: {
ImageView im = (ImageView) rootView.findViewById(R.id.im);
im.setBackgroundResource(R.drawable.thunder1);
ttsButton = (ToggleButton) rootView.findViewById(R.id.btn);
ttsButton.setChecked(true);
break;
}
case 1: {
ImageView im = (ImageView) rootView.findViewById(R.id.im);
im.setBackgroundResource(R.drawable.thunder2);
ttsButton = (ToggleButton) rootView.findViewById(R.id.btn);
ttsButton.setChecked(true);
break;
}
case 2: {
ImageView im = (ImageView) rootView.findViewById(R.id.im);
im.setBackgroundResource(R.drawable.thunder3);
ttsButton = (ToggleButton) rootView.findViewById(R.id.btn);
ttsButton.setChecked(true);
break;
}
}
return rootView;
}
我的時間選擇對話框
private void openTimePickerDialog(boolean is24r) {
Calendar calendar = Calendar.getInstance();
timePickerDialog = new TimePickerDialog(
getActivity(),
onTimeSetListener,
calendar.get(Calendar.HOUR_OF_DAY),
calendar.get(Calendar.MINUTE),
is24r);
timePickerDialog.setTitle("Set Sleep Time");
timePickerDialog.show();
}
TimePickerDialog.OnTimeSetListener onTimeSetListener = new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
timer = new CounterClass((minute * 60 * 1000) + (hourOfDay * 60* 60 * 1000), 1000);
long millis = (minute * 60 * 1000) + (hourOfDay * 60* 60 * 1000);
String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis), TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
//System.out.println(hms);
textViewTime.setText(hms);
timer.start();
}};
public class CounterClass extends CountDownTimer {
/**
* @param millisInFuture The number of millis in the future from the call
* to {@link #start()} until the countdown is done and {@link #onFinish()}
* is called.
* @param countDownInterval The interval along the way to receive
* {@link #onTick(long)} callbacks.
*/
public CounterClass(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
@Override
public void onTick(long millisUntilFinished) {
long millis = millisUntilFinished;
String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis), TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
//System.out.println(hms);
textViewTime.setText(hms);
@Override
public void onFinish() {
System.exit(0);
}
}
當我單擊按鈕時,我嘗試將其停止
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (this.isVisible()) {
btnstop.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if(timer != null)
timer.cancel();
}
});
}
}
我建議您在活動時使用時間選擇器,這樣就可以從子片段中啟動和停止它。 只需定義自己的start , stop , pause方法即可。 然后您可以用這種方式從任何片段中調用它
((YourActivity)getActivity()).yourMethodName();
在活動中聲明您的計時器。
class MyClass extends AppCompatActivity {
**STUFF**
public CountDownTimer timer;
}
然后像這樣開始和停止
((MyClass)getActivity()).timer.start();
((MyClass)getActivity()).timer.cancel();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.