如何使用EditText停止运行计时器?

时间:2019-01-16 13:33:41

标签: android

我正在尝试创建一个应用,该应用在每个问题的前面显示一些问题和EditText字段,以获取CountDownTimer的答案,我遇到的问题是我正在尝试停止最后输入的答案上正在运行的CountDownTimer,并在用户名旁边保存那几秒钟,但不确定如何?我知道questionTimer.cancel()将停止计时器,但必须在最后一个EditText中最后输入的答案上完成。

这是MainActivity.java文件:

    public class MainActivity extends AppCompatActivity {

    CountDownTimer questionTimer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnStart = (Button) findViewById(R.id.start);
        btnStart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setQuestions();
                timer();
            }
        });

    }//End of create()

    public void timer() {

        questionTimer = new CountDownTimer(30000, 1000) {

            public void onTick(long millisUntilFinished) {
                timer = (TextView) findViewById(R.id.timer);
                timer.setText("Seconds Remaining:  " + millisUntilFinished / 1000);
            }

            public void onFinish() {
                timer.setText("Done!");
            }
        }.start();

    }   

    public void setQuestions() {

        ArrayList<Questions> qArrList = new ArrayList<>();

        for (int i = 0; i < 5; i++) {
            ques = new Questions();
            ques.setQuestion("");
            qArrList.add(ques);
        }
        adapter = new AdapterListView(getBaseContext(), R.layout.item_listview, qArrList);
        questListView.setAdapter(adapter);
    }   

}//End of Class

这是AdapterListView.java文件:

public class AdapterListView extends ArrayAdapter<Questions> {

    Context mContext;
    LayoutInflater inflater;
    private ArrayList<Questions> questionsArrayList;
    private Questions quesObject;
    private ArrayList<String> quesList = new ArrayList<String>();
    private int a, b, ab, c, d, cd, e, f, ef, g, h, gh, i, j, ij;
    private ArrayList<Integer> answersList = new ArrayList<Integer>();

    public AdapterListView(Context context, int resource, ArrayList<Questions> questionsArrayList) {
        super(context, resource);
        this.mContext = context;
        this.setQuestionsArrayList(questionsArrayList);
        this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override

    public View getView(final int position, View convertView, ViewGroup parent) {

        final ViewHolder holder;
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.item_listview, null);
            holder = new ViewHolder();
            holder.questionTextView = convertView.findViewById(R.id.question);
            holder.editText = convertView.findViewById(R.id.ans_edit_text);
            holder.imgTrue = convertView.findViewById(R.id.ans_true);
            holder.imgFalse = convertView.findViewById(R.id.ans_false);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        quesObject = getQuestionsArrayList().get(position);
        int count = 0;
        if (position == 0) count = 1;
        else if (position == 1) count = 2;
        else if (position == 2) count = 3;
        else if (position == 3) count = 4;
        else if (position == 4) count = 5;

        Random rand = new Random();
        a = (rand.nextInt(15) + 1);
        b = (rand.nextInt(10) + 1);
        ab = a + b;

        c = (rand.nextInt(15) + 1);
        d = (rand.nextInt(10) + 1);
        cd = c + d;

        e = (rand.nextInt(15) + 1);
        f = (rand.nextInt(10) + 1);
        ef = e + f;

        g = (rand.nextInt(15) + 1);
        h = (rand.nextInt(10) + 1);
        gh = g + h;

        i = (rand.nextInt(15) + 1);
        j = (rand.nextInt(10) + 10);
        ij = i + j;

        quesList.add(a + " + " + b);
        quesList.add(c + " + " + d);
        quesList.add(e + " + " + f);
        quesList.add(g + " + " + h);
        quesList.add(i + " + " + j);

        getAnswersList().add(ab);
        getAnswersList().add(cd);
        getAnswersList().add(ef);
        getAnswersList().add(gh);
        getAnswersList().add(ij);

        holder.questionTextView.setText("Q  " + count + ": \t" + quesList.get(position));

        holder.editText.addTextChangedListener(new TextWatcher() {

            public void afterTextChanged(Editable s) {

                if (holder.editText.getText().toString().trim().length() > 0) {
                    int inputNum = Integer.parseInt(String.valueOf(holder.editText.getText().toString().trim()));

                    if (getAnswersList().get(position) != inputNum) {
                        holder.imgFalse.setVisibility(View.VISIBLE);
                        holder.imgTrue.setVisibility(View.GONE);
                    } else {
                        holder.imgTrue.setVisibility(View.VISIBLE);
                        holder.imgFalse.setVisibility(View.GONE);
                    }
                }
            }
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }
        });
        return convertView;
    }

    @Override
    public int getCount() {
        return getQuestionsArrayList().size();
    }

    static class ViewHolder {
        TextView questionTextView;
        EditText editText;
        ImageView imgTrue, imgFalse;
    }
}

1 个答案:

答案 0 :(得分:0)

我已经设法通过针对Position设置一个int变量并在运行的Timer内的MainActivity类中调用此变量来解决该问题。请参见下面的代码。

    public class MainActivity extends AppCompatActivity {

    CountDownTimer questionTimer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnStart = (Button) findViewById(R.id.start);
        btnStart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setQuestions();
                timer();
            }
        });

    }//End of create()

    public void timer() {

        questionTimer = new CountDownTimer(30000, 1000) {

            public void onTick(long millisUntilFinished) {
                timer = (TextView) findViewById(R.id.timer);
                timer.setText("Seconds Remaining:  " + millisUntilFinished / 1000);

                if (adapter.getEndQuiz() == 5) {
                    questionTimer.cancel();
                }
            }

            public void onFinish() {
                timer.setText("Done!");
            }
        }.start();

    }   

    public void setQuestions() {

        ArrayList<Questions> qArrList = new ArrayList<>();

        for (int i = 0; i < 5; i++) {
            ques = new Questions();
            ques.setQuestion("");
            qArrList.add(ques);
        }
        adapter = new AdapterListView(getBaseContext(), R.layout.item_listview, qArrList);
        questListView.setAdapter(adapter);
    }   

}//End of Class

适配器

    public class AdapterListView extends ArrayAdapter<Questions> {

    Context mContext;
    LayoutInflater inflater;
    private ArrayList<Questions> questionsArrayList;
    private Questions quesObject;
    private ArrayList<String> quesList = new ArrayList<String>();
    private int a, b, ab, c, d, cd, e, f, ef, g, h, gh, i, j, ij;
    private ArrayList<Integer> answersList = new ArrayList<Integer>();
    private int endQuiz = 0;

    public AdapterListView(Context context, int resource, ArrayList<Questions> questionsArrayList) {
        super(context, resource);
        this.mContext = context;
        this.setQuestionsArrayList(questionsArrayList);
        this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override

    public View getView(final int position, View convertView, ViewGroup parent) {

        final ViewHolder holder;
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.item_listview, null);
            holder = new ViewHolder();
            holder.questionTextView = convertView.findViewById(R.id.question);
            holder.editText = convertView.findViewById(R.id.ans_edit_text);
            holder.imgTrue = convertView.findViewById(R.id.ans_true);
            holder.imgFalse = convertView.findViewById(R.id.ans_false);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        quesObject = getQuestionsArrayList().get(position);
        int count = 0;
        if (position == 0) count = 1;
        else if (position == 1) count = 2;
        else if (position == 2) count = 3;
        else if (position == 3) count = 4;
        else if (position == 4) count = 5;

        Random rand = new Random();
        a = (rand.nextInt(15) + 1);
        b = (rand.nextInt(10) + 1);
        ab = a + b;

        c = (rand.nextInt(15) + 1);
        d = (rand.nextInt(10) + 1);
        cd = c + d;

        e = (rand.nextInt(15) + 1);
        f = (rand.nextInt(10) + 1);
        ef = e + f;

        g = (rand.nextInt(15) + 1);
        h = (rand.nextInt(10) + 1);
        gh = g + h;

        i = (rand.nextInt(15) + 1);
        j = (rand.nextInt(10) + 10);
        ij = i + j;

        quesList.add(a + " + " + b);
        quesList.add(c + " + " + d);
        quesList.add(e + " + " + f);
        quesList.add(g + " + " + h);
        quesList.add(i + " + " + j);

        getAnswersList().add(ab);
        getAnswersList().add(cd);
        getAnswersList().add(ef);
        getAnswersList().add(gh);
        getAnswersList().add(ij);

        holder.questionTextView.setText("Q  " + count + ": \t" + quesList.get(position));

        holder.editText.addTextChangedListener(new TextWatcher() {

            public void afterTextChanged(Editable s) {

                if (holder.editText.getText().toString().trim().length() > 0) {
                    int inputNum = Integer.parseInt(String.valueOf(holder.editText.getText().toString().trim()));

                    if (getAnswersList().get(position) != inputNum) {
                        holder.imgFalse.setVisibility(View.VISIBLE);
                        holder.imgTrue.setVisibility(View.GONE);
                    } else {
                        holder.imgTrue.setVisibility(View.VISIBLE);
                        holder.imgFalse.setVisibility(View.GONE);
                    }

                    if(position == 0) setEndQuiz(1);
                    else if(position == 1) setEndQuiz(2);
                    else if(position == 2) setEndQuiz(3);
                    else if(position == 3) setEndQuiz(4);
                    else if(position == 4) setEndQuiz(5);
                }
            }
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }
        });
        return convertView;
    }

    @Override
    public int getCount() {
        return getQuestionsArrayList().size();
    }

    static class ViewHolder {
        TextView questionTextView;
        EditText editText;
        ImageView imgTrue, imgFalse;
    }
}