吐司消息消失后​​完成活动?

Tim*_*ima 29 android toast

有没有人知道,如果有可能做某事(在我的情况下完成活动)在吐司消息将被关闭?

Lal*_*ani 45

你只需创建一个Thread持续时间,只要Toast显示,然后你就可以完成你的操作Activity.

    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            // your other stuff
            Toast.makeText(this,"This is a Toast", Toast.LENGTH_LONG).show();
            thread.start();
}
Run Code Online (Sandbox Code Playgroud)

现在创建一个等待(LENGTH_LONG = 3.5)或(LENGTH_SHORT = 2)秒的线程

    Thread thread = new Thread(){
             @Override
            public void run() {
                 try {
                    Thread.sleep(Toast.LENGTH_LONG); // As I am using LENGTH_LONG in Toast
                    Your_Activity.this.finish();
                } catch (Exception e) {
                    e.printStackTrace();
                }
             }  
           };
Run Code Online (Sandbox Code Playgroud)

  • 好极了!Thx :)所以你可以将Toast.LENGTH_LONG添加到sleep方法中,以获得完全匹配 (2认同)
  • 新线程在这里有点矫枉过正,至少你可以使用 Handler().postDelayed({...},Toast.LENGTH_LONG )。此外,您可能会在以这种方式使用新线程更改配置时发生内存泄漏 (2认同)

Jul*_*tta 16

它应该首先显示,Toast然后在2秒后,它将完成你的activity.

Toast.makeText(YourActivity.this, "MESSAGE", Toast.LENGTH_SHORT).show();

new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        YourActivity.this.finish();
    }
}, 2000);
Run Code Online (Sandbox Code Playgroud)


Poi*_*ull 9

android.widget.Toast不提供任何监听器来通知它何时完成.

您可以调用Toast.getDuration()来了解它将持续多长时间,并让自己的TimerTask在Toast消失时运行,并在那里完成您的任务.


小智 8

是的,但这是一种诡计

Android Toast在完成后无法设置回调.

所以你能做的就是基于这个事实

private static final int LONG_DELAY = 3500; // 3.5 seconds
private static final int SHORT_DELAY = 2000; // 2 seconds
Run Code Online (Sandbox Code Playgroud)

现在你可以这样做:

  1. 设置吐司
  2. 根据LENGTH_LONG(3.5s)或LENGTH_SHORT(2s)设置计数器线程以关闭活动.
  3. toast.show()和thread.start();

  • 也许你是对的,getDuration只返回LENGTH_SHORT或LENGTH_LONG,它们是常量0/1.不是实时的ms. (3认同)