gpt4 book ai didi

java - 在android studio中增加整数的问题

转载 作者:行者123 更新时间:2023-12-01 11:33:37 24 4
gpt4 key购买 nike

我正在制作一个 Android Studio 应用程序,并试图让我的屏幕循环显示数字 0-9,直到用户单击并停止特定数字上的循环。到目前为止我编写的代码是:

public void loop () {
for (int a = 0; a<10; a = ++a % 10) {
textView2.setText("" + a);
}

相关 xml 部分

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0"
android:id="@+id/textView2"
.../>

此代码不会在屏幕上输出任何内容。我尝试了代码的几种不同变体,如果它确实显示数字,它只显示最后一个数字“9”。这让我认为它已经起作用了,但它遍历数字的速度太快了,我看不到,并停在最后一个数字上,而不是无限循环。有人能指出我可能出错的地方吗?我仍在学习中,因此对于相对简单的查询表示歉意。

另外,当我确实让它工作时,并且我想让它可点击时,我是否将 onclicklistener 放入 for 循环中?

非常感谢。

最佳答案

你是对的,当它显示 9 时,它只是非常快速地循环数字,你甚至看不到它们的变化。

你没有做错任何事,你只是需要在更改数字之间暂停一下。非常简单但丑陋的修复方法是在 setText(...) 方法之后添加:wait(1000)

但是,不建议这样做,因为 Android 在主线程上绘制和接收事件。当您使用 wait 阻塞线程 1000 毫秒时,您会导致线程在那一秒内无法接受任何事件,从而导致您的应用卡住。

要解决卡住问题,您需要更新 TextView,然后在主线程上发布一条消息,告知它应该在 1 秒内再次更新。由于分离,它看起来并不像一个循环。

为了在主线程上发布消息,我将使用 Handler (android.os.Handler),它在它创建的线程上执行消息,除非您使用不同的Looper

这是一个粗略的示例:

private int a = 0;
private Handler handler = new Handler();
private TextView textView2;

public void loop() {
handler.post(new Runnable() {
@Override
public void run() {
updateText();
a = a++ % 10;
if (a < 10) {
handler.postDelayed(this, 1000);
}
}
});
}

public void updateText() {
textView2.setText("" + a);
}

只需在单击按钮时调用loop(),其余的就会自动处理。

关于java - 在android studio中增加整数的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30220423/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com