首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CountDownTimer for quiz无法访问我需要它的方式

CountDownTimer for quiz无法访问我需要它的方式
EN

Stack Overflow用户
提问于 2021-05-21 11:19:39
回答 1查看 34关注 0票数 0

我正在写一个小小的数学测验,每级10道题。我正在尝试编写一个10秒计时器,它具有以下功能:

当问题用完时,

  • 移到下一个问题,并在输入

时重新启动计时器

我的问题是,无论我如何编写这段代码,我都无法从"onFinish()“函数以及程序的其余部分访问计时器。例如"onCorrect()“,我需要能够取消并重新启动在"onCreate()”中初始化的现有计时器,但是我无法通过MyCountDownTimer类或函数访问该定时器(我尝试使用这两种方法都没有效果)。

下面是我的代码和注释,以显示我需要计时器工作的位置。

代码语言:javascript
复制
package com.example.myapplication;

import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.os.CountDownTimer;

import android.view.View;
import android.widget.Button;
import android.widget.TextView;


import java.util.Random;


public class Level2 extends AppCompatActivity {
    int score = 0;
    int q = 1;
    TextView value;
    TextView q_num;
    TextView timer_label = findViewById(R.id.Timer);

    /*public class MyCountDownTimer extends CountDownTimer {
        TextView timer_label = findViewById(R.id.Timer);
        public MyCountDownTimer(long startTime, long interval) {
            super(startTime, interval);
        }


        @Override
        public void onFinish() {
            onDone();
        }

        @Override
        public void onTick(long millisUntilFinished) {
            int temp = (int)millisUntilFinished/1000;
            //do what ever You want
            timer_label.setText(String.format(getResources().getString(R.string.timer_string),String.valueOf(temp)));


        }
    }
    @Override

     */
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_level2);


        q = 1;
        //MyCountDownTimer t = new MyCountDownTimer(11000,1000);

        Button b1 = findViewById(R.id.option1);
        Button b2 = findViewById(R.id.option2);
        Button b3 = findViewById(R.id.option3);
        Button b4 = findViewById(R.id.option4);

        Random first = new Random();
        int upperbound = 100;
        int random_id = first.nextInt(upperbound);

        selectData(random_id);


        //
        getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); //bellow setSupportActionBar(toolbar);
        getSupportActionBar().setCustomView(R.layout.action_layout);
        //Gives action bar style

        value = findViewById(R.id.score_value);
        q_num = findViewById(R.id.question_number);


        b1.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                String ans = (String) b1.getText();
                onCheck(ans,score);
            }
        });
        b2.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                String ans = (String) b2.getText();
                onCheck(ans,score);
            }
        });
        b3.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                String ans = (String) b3.getText();
                onCheck(ans,score);
            }
        });
        b4.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                String ans = (String) b4.getText();
                onCheck(ans,score);
            }
        });


    }



    public void onCheck(String ans, int score) {
        TextView ans_data = findViewById(R.id.answer_data);
        String correct = (String) ans_data.getText();
        if (ans.contains(correct)) {
            onCorrect(score);
        }
        else{

            onWrong();
        }
    }


    public void onCorrect(int temp){
        //t.cancel()
        //t.start()
        temp++;
        score = temp;
        q++;
        if(q >= 11){
            if(score >2){
                complete(score);
            }
            else{
                Intent i = new Intent(Level2.this, ne.class);
                startActivity(i);
            }
        }
        value.setText(String.valueOf(score));
        q_num.setText(String.valueOf(q));
        Random first = new Random();
        int upperbound = 100;
        int random_id = first.nextInt(upperbound);
        selectData(random_id);
    }

    public void onDone(){
        //t.start()
        q++;
        if(q>=11){
            if(score >2){
                complete(score);
            }
            else{
                Intent i = new Intent(Level2.this, ne.class);
                startActivity(i);
            }
        }
        else{
            q_num.setText(String.valueOf(q));
            Random first = new Random();
            int upperbound = 100;
            int random_id = first.nextInt(upperbound);
            selectData(random_id);
        }
    }

    public void onWrong(){
        //t.cancel()
        //t.start
        q++;
        if(q>=11){
            if(score >2){
                complete(score);
            }
            else{
                Intent i = new Intent(Level2.this, ne.class);
                startActivity(i);
            }
        }
        else{
            q_num.setText(String.valueOf(q));
            Random first = new Random();
            int upperbound = 100;
            int random_id = first.nextInt(upperbound);
            selectData(random_id);
        }

供参考;

right

  • onCorrect()

  • onCheck()检查答案是否是right

  • onWrong() is wrong

  • onDone()当计时器耗尽

问题的根源在于我不能将t放入onDone中,因为它是由MyCountDownTimer类调用的,它不能访问onCreate中调用的t。

EN

回答 1

Stack Overflow用户

发布于 2021-05-22 04:43:53

将MyCountDownTimer t声明为onCreate()之外的全局变量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67635830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档