有没有人知道,如果有可能做一些事情(在我的情况下完成活动)吐司消息将被关闭?吐司消息消失后完成活动?
回答
只需创建一个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();
}
现在创建等待(LENGTH_LONG = 3.5)或(LENGTH_SHORT = 2)秒线程
Thread thread = new Thread(){
@Override
public void run() {
try {
Thread.sleep(3500); // As I am using LENGTH_LONG in Toast
Your_Activity.this.finish();
} catch (Exception e) {
e.printStackTrace();
}
}
};
android.widget.Toast在完成时不提供任何监听器来通知。
您可以调用Toast.getDuration()来了解它会持续多久,并在Toast消失时执行自己的TimerTask,并在那里执行任务。
我不确定你可以用Toast做到这一点,但是,你可以通过简单的对话来替换烤面包(并且如果你想要重用烤面包设计),然后你可以使用诸如onDetachedFromWindow
等方法来挂钩活动关闭窗口的。
当Toast
正在完成时,实际上没有回调,但是如果您需要知道什么时候它会被关闭,您可以启动一个后台线程,睡眠时间等于Toast
持续时间的毫秒数,然后执行所需的操作。这只是解决问题的一种方式,我相信还有更多解决方案。希望这可以帮助。
是的,但这是一个诡计方式
的Android吐司没有一种方法来设置回调它完成之后。
所以,你可以基于这个事实
private static final int LONG_DELAY = 3500; // 3.5 seconds
private static final int SHORT_DELAY = 2000; // 2 seconds
现在你可以做做什么:
- 设置敬酒
- 设置基础上,LENGTH_LONG计数器线程(3.5 s)或LENGTH_SHORT(2s)关闭活动。
- toast.show()和thread.start();
不要对延误的假设!这些可能会在不同的API版本中改变。 –
我知道,但这是做他现在想做的事情的唯一方法。 –
也许你是对的,getDuration只返回LENGTH_SHORT或LENGTH_LONG,它们是常量0/1。不是以ms为单位的实时。 –
Afaik INotificationManager API(在toast类的引擎下使用)不支持在关闭Toast时通知调用者。
还没有办法检查Toast是否显示或隐藏,而无需使用反射来挑选表示暂时通知的内部类。
你使用Onstop()调用toast,完成。你的面包现在会出现。
这里是我如何做到这一点?
注意,这类包含一个调用来关闭调用它的活动。如果需要,你可以把它拿出来。
此外,请注意,睡眠时间跟踪吐司持续时间,但我已经增加了额外的半秒,以在活动结束前留出一点余量。
public class Toaster implements Runnable
{
Context theContext;
CharSequence theMessage;
int theDuration;
Activity theActivity;
public Toaster(Activity a, Context c, CharSequence s, int i)
{
theActivity = a;
theContext = c;
theMessage = s;
theDuration = i;
}
@Override
public void run()
{
Toast toast = Toast.makeText(theContext, theMessage, theDuration);
toast.setGravity(Gravity.CENTER_HORIZONTAL|Gravity.CENTER_VERTICAL, 0, 0);
toast.show();
Thread t = new Thread(new Runnable()
{
@Override
public void run()
{
try
{
Thread.sleep(theDuration == Toast.LENGTH_SHORT ? 2500 : 4000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
theActivity.finish();
}
});
t.start();
}
}
活动中,有一段代码,看起来像这样,把它称为:
Context c = getApplicationContext();
CharSequence msg = "Form Data Submitted!";
int duration = Toast.LENGTH_SHORT;
runOnUiThread(new Toaster(this, c, msg, duration));
我不知道你的使用情况是什么,但你真的需要等待敬酒接近完成你的活动?
就我而言,我有一个活动,它是从一个URL进入应用程序的入口点(允许从电子邮件或网页中的链接打开该应用程序)。如果URL没有通过验证检查,我告诉举杯并完成活动:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
if (!validateUrl()) {
Toast.makeText(this, R.string.invalid_url, Toast.LENGTH_LONG).show();
finish();
return;
}
...
}
这显示了面包,我没有等到它调用之前完成不再显示()。起初,我认为这不起作用,但后来我发现这是因为我忘了在烤面包上打电话给show()。
它应该先显示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);
我只是做一个简单的库说, “问题” 下载地址:
https://github.com/mkiisoft/Toaster
,并使用这种方式:
Toaster.getInstance().makeText(context, "your custom message", Toast.LENGTH_SHORT, new OnToasterFinish() {
@Override
public void finish() {
// Your code over here after the Toast
}
});
- 1. 吐司消息
- 2. libGDX吐司消息
- 3. 吐司消息android
- 4. 空吐司消息
- 5. 活动完成后通知消失
- 6. Android吐司不会消失
- 7. 吐司消息长度
- 8. 如何关闭吐司消息和活动
- 9. 如何显示吐司消息不扩展活动类
- 10. 我怎样才能让吐司消失?
- 11. 使用Java的PC吐司消息
- 12. 使用开关更改吐司消息
- 13. 错误定制吐司消息
- 14. 得到错误的吐司消息
- 15. 翻译吐司消息android studio
- 16. 吐司消息不工作android
- 17. 吐司消息没有及时出现
- 18. 吐司消息像Android这样
- 19. espresso检查部分消息文本的吐司消息
- 20. 我如何取消asyntask并显示吐司消息
- 21. .each()$ ajax显示消息完成后
- 22. 吐司取消不起作用
- 23. 自动完成项目消失
- 24. Jquery自动完成 - 无结果消息
- 25. AlertDialog在切换活动后消失
- 26. MBProgressHUD在完成前消失
- 27. 为什么吐司消息要打印两次?
- 28. 在特定帧处显示吐司消息
- 29. 禁用通知也禁用应用程序的吐司消息
- 30. 吐司消息不显示在列表视图中
太棒了! Thx :)因此,您可以将Toast.LENGTH_LONG添加到睡眠方法中,以获得完全匹配 –
对于那些没有提及原因而进行倒票的人来说,RIP可以是:) –