代码之家  ›  专栏  ›  技术社区  ›  duy anh hoang

CountDownTimer错误地将文本设置为超出要求的视图

  •  1
  • duy anh hoang  · 技术社区  · 6 年前

    CountDownTimer onFinish 方法,我想将2个字符串设置为2个不同的视图,如下所示

    public void onFinish() {
                setText(timer, getString(R.string.times_up));
                setText(speedTextView, speedValue);
    
                setColorTimer(timer, Color.RED);
    
                runOnUiThread(new Runnable() {
                    public void run() {
                        final Handler handler = new Handler();
                        handler.postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                Intent intent = new Intent(getApplicationContext(), ResultActivity.class);
                                startActivity(intent);
                            }
                        }, 3000);
                    }
                });
            }
    

    但是,当计时器完成时, R.string.times_up 值被强制转换为 timer speedTextView 查看。我改变了两行的顺序,在这种情况下, speedValue 在两个视图上强制转换,尽管它们应该是两个不同的方法调用。

    setText 方法是一个经过修改的方法,用于在主线程上运行它们,而不是像这样运行后台线程

    private void setText(final TextView text, String value) {
        speedValueToSetText = value;
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                text.setText(speedValueToSetText);
            }
        });
    }
    

    我如何解决这个问题?settext方法不应该彼此独立吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Motee    6 年前

    speedValueToSetText speedValueToSetText = value; setText

    private void setText(final TextView text, String value) {
    
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            text.setText(value);
        }
    });
    

    private void setText(final TextView text, String value) {
        speedValueToSetText = value;
        final String resultValue = value;
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                text.setText(resultValue);
            }
        });
    }