持久Toast消息:Toast在执行后不会消失

pzy*_*ren 5 android toast

我有一个在执行后不会消失的Toast消息.我猜这与它在循环中有关,但我不确定.有人可以帮我弄清楚为什么吐司消息不会分开吗?

 @Override
public void onClick(View v) {
    int index = 0;
    for(int i= 0; i<userArray.length; i++){
        if(email.getText().toString().equals(userArray[i])){
            index = i;
        }
        if(passArray[index].equals(password.getText().toString())){
            Toast.makeText(getBaseContext(), "SUCCESS!", Toast.LENGTH_SHORT).show();

        } else {
            Toast.makeText(getBaseContext(), "INVALID LOGIN", Toast.LENGTH_SHORT).show();
        }
    }
    Intent mainIntent = new Intent(LoginActivity.this, MainActivity.class);
    startActivityForResult(mainIntent, 0);
}
Run Code Online (Sandbox Code Playgroud)

}

Jon*_*ole 11

如果您从服务线程调用Toast消息并且该Toast设置为消失之前该线程完成它的工作,则Toast消息可能会卡住.然后,您将停留在屏幕上的Toast消息,直到您杀死该应用程序.


Dav*_*arl 5

Toast总是消失。总是。

因此,您正在显示多条 Toast 消息。保证。通过使用某种计数器更改消息或在显示初始消息后禁用来测试这一点。

请注意,相当多的 Toast 可以堆叠起来,并需要很长时间才能完成背靠背的显示。等待,只要您的应用程序没有无限循环,它们最终就会消失。

编辑:我即时更正。显然,Toast如果从线程、服务或 IntentService 启动,消息可能会卡住并保持显示。谢谢@Johnathan 和@zapotec。

  • 我要补充的是,吐司并不总是消失。如果您从 Service 线程调用它并且该线程在 Toast 设置为消失之前完成了它的工作,那么您将被困在屏幕上的 Toast 消息中,直到您终止该应用程序。 (15认同)
  • 乔纳森科尔是对的。如果您在线程、服务、IntentService 中运行 Toast 并且它在 Toast 消失之前完成,则它不会消失..... (5认同)

GrI*_*sHu -1

  I m guessing it has something to do with it being in the loop but I'm not sure.
Run Code Online (Sandbox Code Playgroud)

是的,你是对的,它的出现是因为你将它保持在for循环中,所以循环执行的次数与Toast出现的次数一样多。

您在代码中多次显示 Toast。

如果您不想多次吐司,我会更好,那么您可以将其写在 for 循环之外。