如果函数追加加载消息不止一次

时间:2012-07-30 13:50:01

标签: java android if-statement count

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

所以我尝试在每个加载消息2追加后添加一个count变量,但它不起作用。哪里出错了,还有其他解决办法吗?

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++;
}

2 个答案:

答案 0 :(得分:1)

每次执行后都需要避免发布其他事件。也许更像是这样的事情:

void showMessage1() {
    // ... code to show message 1 ...

    handler.postDelayed(new Runnable(){    
        @Override
        public void run(){
            showMessage2();
        }   
    }, 3*1000L); 
}

void showMessage2() {
    // ... code to show message 2 ... 
}

请注意,显示消息的代码每封邮件只执行一次。

答案 1 :(得分:1)

您在以下行中犯了错误:

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

在这里,您在处理Runnable时将此this对象发送给处理程序。这意味着当您执行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,因为它会创建一个无限循环。