首页 > 解决方案 > CountDownTimer 错误地将文本设置为比要求的更多视图

问题描述

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值将被强制转换为两者timerspeedTextView视图。我更改了 2 行的顺序,在这种情况下,speedValue在两个视图上都进行了转换,尽管它们应该是 2 个不同的方法调用。

setText方法是一种修改后的方法,可以在主线程而不是像这样的后台线程上运行它们

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

我该如何解决这个问题?setText 方法不应该相互独立吗?

标签: android

解决方案


全局变量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);
        }
    });
}

推荐阅读