【问题标题】:How can I use CountdownTimer on a fragment?如何在片段上使用 CountdownTimer?
【发布时间】:2017-12-22 21:50:52
【问题描述】:

我是 android studio 的新手,我正在尝试在片段中创建一个计时器。我想要一个在我单击按钮时启动计时器的应用程序。

这是我的片段代码

public class tab3Fragment extends Fragment {
    private static final String TAG = "tab3Fragment";

    CountDownTimer countDownTimer= new CounterClass(180000, 1000);
    private Button btn3;
    private TextView timer;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.tab3_fragment,container,false);
        timer= (TextView) view.findViewById(R.id.timer);
btn3= (Button) view.findViewById(R.id.startBTN);

        btn3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                countDownTimer.start();
            }
        });
        return view;

    }

    public  class CounterClass extends CountDownTimer{
        @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))
            );
            timer.setText(hms);
        }
    }

}

我不知道我是否正确。

【问题讨论】:

  • 错误是什么?
  • 您现在面临什么问题?
  • 有很多问题:CounterClass 中的 CounterClass() 不能应用于 (int, int) 并且类 'CounterClass' 必须要么声明为抽象,要么实现抽象方法 'onFinish()'倒计时。

标签: android android-fragments countdowntimer


【解决方案1】:

你还没有声明你的 btn3 按钮。它目前为空。

你应该像这样实现倒数计时器

 CountDownTimer countDownTimer = new android.os.CountDownTimer(100,0){
             @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))
                );
                timer.setText(hms);
                 }

                 @Override
                 public void onFinish() {

                 }
             }

【讨论】:

  • 在你的计时器类中重写 onFinish 方法
  • 对不起,我不知道该怎么做,没关系。它显示另一个错误“'android.os.CountDownTimer'中没有可用的默认构造函数”
  • 哇,它成功了!多谢,伙计。我有一个问题,虽然计时器没有显示 00:00:00 它在 00:00:01 停止。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多