Android Studio Java更新循环中的文本

Android Studio Java更新循环中的文本,第1张

Android Studio Java更新循环中的文本

当前,您调用

Thread.sleep(25)
UI线程。这意味着UI线程将被阻止,并且不会更新您的文本视图。经过所有这些阻止之后,它最终会在for循环之后被取消阻止,因此您可以立即查看所有文本字段的更新。

为了获得更好的用户体验,请 不要让UI线程进入睡眠状态。

您需要一些可以在一段时间后完成一些工作的东西。

android.os.Handler
是一个不错的选择。它具有一种
postDelayed
可以在一段时间后完成您想做的事情的方法。

IMO,直接致电

postDelayed
确实可以完成您的工作。但是每个
postDelayed
调用都包含另一个,以便在几秒钟后更新下一个文本视图。这意味着您将获得14层嵌套!那不是很干净的代码,对吗?

所以,让我介绍一下

Timer
课程!

这里是:

import android.os.Handler;public class Timer {    private Handler handler;    private boolean paused;    private int interval;    private Runnable task = new Runnable () {        @Override        public void run() { if (!paused) {     runnable.run ();     Timer.this.handler.postDelayed (this, interval); }        }    };    private Runnable runnable;    public int getInterval() {        return interval;    }    public void setInterval(int interval) {        this.interval = interval;    }    public void startTimer () {        paused = false;        handler.postDelayed (task, interval);    }    public void stopTimer () {        paused = true;    }    public Timer (Runnable runnable, int interval, boolean started) {        handler = new Handler ();        this.runnable = runnable;        this.interval = interval;        if (started) startTimer ();    }}

这东西很酷。

为了满足要求,让我们在活动类中添加

counter
textViewToUpdate
,以便我们知道它的编号以及接下来要更新的文本视图。哦,将
textViews
变量移到类级别:

int counter = 1;int textViewToUpdate = 0;TextView[] textViews;

然后初始化

textViews
in
onCreate

textViews = new TextView[] {        (TextView)findViewById(R.id.player1_1),        (TextView)findViewById(R.id.player1_2),        (TextView)findViewById(R.id.player1_3),        (TextView)findViewById(R.id.player1_4),        (TextView)findViewById(R.id.player1_5),        (TextView)findViewById(R.id.player1_6),        (TextView)findViewById(R.id.player1_7),        (TextView)findViewById(R.id.player2_1),        (TextView)findViewById(R.id.player2_2),        (TextView)findViewById(R.id.player2_3),        (TextView)findViewById(R.id.player2_4),        (TextView)findViewById(R.id.player2_5),        (TextView)findViewById(R.id.player2_6),        (TextView)findViewById(R.id.player2_7)};

首先在您的课程中创建一个计时器:

Timer t;

在您的

Initialization
方法中,创建一个可运行的。这个可运行对象将每隔几秒钟运行一次。

Runnable r = new Runnable () {    @Override    public void run() {        PlayActivity self = PlayActivity.this;        self.textViews[self.textViewToUpdate].setText(Integer.toString(self.counter));        self.textViewToUpdate++;        if (self.textViewToUpdate == self.textViews.length) { self.textViewToUpdate = 0; self.counter++; if (self.counter == 8) {     self.t.stopTimer(); }        }    }}

然后,我们创建计时器并运行它:

t = new Timer(r, interval, true);

您可以

interval
用任何喜欢的数字代替,也许是
250
(0.25秒)?

还有BOOM!你做到了!



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5562143.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存