gpt4 book ai didi

java - 如果函数多次附加加载消息

转载 作者:行者123 更新时间:2023-12-02 07:40:09 24 4
gpt4 key购买 nike

我有一个加载屏幕,我想显示loadingMessage1 3秒而不是显示加载消息2。我只想加载消息2出现一次,但是当我尝试这样做时,加载消息2不断被附加在无限循环。

所以我尝试在每次加载消息 2 附加后将计数变量增加,但它不起作用。我哪里出错了,还有其他解决方案吗?

final TextView loadingMessage1 = (TextView)this.findViewById(R.id.loadingMessage1);
int count = 0;
final Handler handler = new Handler();

if (count == 0){
handler.post(new Runnable(){
@Override
public void run(){
loadingMessage1.append("Loading Message 2");
handler.postDelayed(this, 3*1000L);
}
});
count++;
}

最佳答案

您在以下行中犯了错误:

handler.postDelayed(this, 3*1000L);

在这里,您在处理this时将此Runnable对象发送到处理程序。这意味着当您首先执行 Runnable 时,最后将其再次添加到处理程序的消息循环中。这样你就得到了一个无限循环。类似的东西可以解决你的问题:

final TextView loadingMessage1 = (TextView)this.findViewById(R.id.loadingMessage1);
int count = 0;
final Handler handler = new Handler();

handler.postDelayed(new Runnable(){
@Override
public void run(){
loadingMessage1.append("Loading Message 2");
}
}, 3*1000L);

编辑:

要使所有这些内容变得灵活,请执行以下操作:

// inner class
class TextChanger implements Runnable {
private final String message;

public TextChanger(String message) {
this.message = message;
}

@Override
public void run() {
loadingMessage1.append(message);
}

}

然后在代码中的某个位置:

public static final long TIME_CONSTANT = 3*1000L;

final TextView loadingMessage1 = (TextView)this.findViewById(R.id.loadingMessage1);
int count = 0;
final Handler handler = new Handler();

handler.postDelayed(new TextChanger("Whatever 1"), TIME_CONSTANT);
handler.postDelayed(new TextChanger("Whatever 2"), 2 * TIME_CONSTANT);

等等。诀窍是不要像以前那样引用 this,因为它会创建无限循环。

关于java - 如果函数多次附加加载消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11722918/

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