一个接一个地显示多个Toast的问题

问题描述 投票:1回答:4

对不起,我的英语不好。 我希望按顺序显示两个吐司,换句话说当第一个吐司持续时间超过第二个吐司时出现。 这是我的代码:

Toast.makeText(this, "Toast1", Toast.LENGTH_SHORT).show();
Toast.makeText(this, "Toast2", Toast.LENGTH_SHORT).show();

但只会出现第二个吐司信息。我认为当第二次吐司的show方法执行时它将取消之前的吐司(第一次吐司)

我用这段代码解决了我的问题:

Toast.makeText(this, "Toast1", Toast.LENGTH_SHORT).show();
    Handler handler =new Handler();
    handler.postDelayed(new Runnable()
    {
        @Override
        public void run()
        {
            Toast.makeText(MainActivity.this, "Toast2", Toast.LENGTH_SHORT).show();
        }
    },1000);

但有没有更简单的解决方案?

android toast
4个回答
3
投票

但只会出现第二个吐司信息。我认为当第二次吐司的show方法执行时它将取消之前的吐司(第一次吐司)

当你调用show方法时,它将被放入UI线程的消息队列中,Toast将按顺序显示。但是你同时放两个Toast,后者会与前者重叠。

我希望按顺序显示两个吐司,换句话说当第一个吐司持续时间超过第二个吐司时出现。

来自Toast duration

private static final int LONG_DELAY = 3500; // 3.5 seconds 
private static final int SHORT_DELAY = 2000; // 2 seconds

要在第一个吐司的持续时间后显示第二个吐司,请将代码更改为

Toast.makeText(this, "Toast1", Toast.LENGTH_SHORT).show();
Handler handler = new Handler();
handler.postDelayed(new Runnable()
{
    @Override
    public void run()
    {
        Toast.makeText(MainActivity.this, "Toast2", Toast.LENGTH_SHORT).show();
    }
}, 2000);

但有没有更简单的解决方案?

使用Handler是实现任务的简单易用的解决方案。


2
投票

有两种方法可以实现它

  • 方法1:使用您使用的线程,但使用计时器并逐个执行
  • 方法2:使用任何循环,例如使用For循环

0
投票

这应该可以帮到你:

Toast.makeText(this, "Show toast 1", Toast.LENGTH_SHORT).show();
    new Thread(){
        @Override
        public void run() {
            try{
                sleep(Toast.LENGTH_SHORT); // sleep the time first toast is being shown
                Toast.makeText(this, "Show toast 2", Toast.LENGTH_SHORT).show();
            }catch (InterruptedException e){
                e.printStackTrace();
            }
        }
    }.start();

0
投票

其他解决方案是使用AlertDialog

createDialog().show();

用两个方法createDialog()和continueDialog()

public AlertDialog createDialog() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("Toast1")
            .setPositiveButton("Next",
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            continueDialog().show();
                        }
                    });
    return builder.create();
}

public AlertDialog continueDialog() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("Toast2")
            .setPositiveButton("OK",
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {

                        }
                    });
    return builder.create();
}
© www.soinside.com 2019 - 2024. All rights reserved.