【问题标题】:Problem with display multiple Toast in order one after another依次显示多个 Toast 的问题
【发布时间】:2018-09-14 14:10:52
【问题描述】:

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

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

但只会出现第二条 toast 消息。我认为当执行第二个 toast 的 show 方法时,它将取消以前的 toast(第一个 toast)

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

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);

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

【问题讨论】:

  • 如果我必须一个接一个地展示相同的吐司怎么办?例如,在登录期间,当用户在不输入任何数据的情况下按下提交时:“需要用户名”.. 这个 toast 一个一个重叠。如果我必须一个接一个地显示呢?
  • 考虑为其中一条消息使用 Snackbar,通常情况下,它可能更合适。

标签: android toast


【解决方案1】:

但只会出现第二条 toast 消息。我想当显示方法时 第二个 toast 将执行它会取消之前的 toast(第一个 toast)

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

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

来自Toast duration

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

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

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 是完成任务的简单易行的解决方案。

【讨论】:

  • 如果我必须一个接一个地展示相同的吐司怎么办?例如,在登录期间,当用户在不输入任何数据的情况下按下提交时:“需要用户名”.. 这个 toast 一个一个重叠。如果我必须一个接一个地显示呢?
【解决方案2】:

有两种实现方式

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

【讨论】:

  • 如果我必须一个接一个地展示相同的吐司怎么办?例如,在登录期间,当用户在不输入任何数据的情况下按下提交时:“需要用户名”.. 这个 toast 一个一个重叠。如果我必须一个接一个地显示呢?
  • 要使方法 2 起作用,您必须在循环中有一个延迟。否则,第二次 toast 将立即发生;不会看到第一个吐司。 (如果在循环中设置延迟,则必须在后台线程上。您可能不需要在 UI 线程上调用 toast。)
【解决方案3】:

其他解决方案是使用 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();
}

【讨论】:

    【解决方案4】:

    这应该对你有帮助:

    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();
    

    【讨论】:

    • 如果我必须一个接一个地展示相同的吐司怎么办?例如,在登录期间,当用户在不输入任何数据的情况下按下提交时:“需要用户名”.. 这个 toast 一个一个重叠。如果我必须一个接一个地显示呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多