当我的应用启动但尚未加载文件时,用户点击该按钮时会获得Toast
。加载大约需要半秒钟,因此,由于他能够多次单击该按钮,因此可以在之后显示多个Toast
。
我尝试将Toast
对象设置为MainActivity
类的属性,但它与NullPointerException
s崩溃。
实施:
Toast lToast;
(...)
public void exampleMethod() {
if(lToast == null) {
lToast.makeText(this, "Noch kein Sound geladen.", Toast.LENGTH_SHORT);
lToast.show();
}
}
是否可以阻止Toast
排队而无需拥有本地属性?如果没有,我做错了什么?
答案 0 :(得分:3)
我不确定你的意思是什么"没有本地属性",但是深入研究android代码,你会发现长短延迟如下
private static final int LONG_DELAY = 3500; // 3.5 seconds
private static final int SHORT_DELAY = 2000; // 2 seconds
所以当你启动你的吐司时,如果你捕捉到这样的时间戳
long lastToastTimestamp = System.currentTimeMillis();
你应该能够阻止多个Toast消息
if (System.currentTimeMillis() - lastToastTimestamp > 2000)
{
lastToastTimestamp = System.currentTimeMillis();
Toast.makeText(this, "Noch kein Sound geladen.", Toast.LENGTH_SHORT).show();
}
或者这个
制作字段:
Toast mToast = null;
然后是代码:
if (mToast == null)
{
mToast = Toast.makeText(context, "Noch kein Sound geladen.", Toast.LENGTH_SHORT);
mToast.show();
new Handler().postDelayed(new Runnable() {
@Override
public void run()
{
mToast = null;
}
}, 2000);
}
如果你想让它变得更复杂,你可以创建自己的队列,并且只插入将在前一个到期时显示的新吐司,如果给予toast的文本与当前的那个不同而且所有队列中的那些。
答案 1 :(得分:2)
Toast.makeText(...)
是返回Toast
实例的Toast
类的静态成员。您已声明Toast lToast
个对象但未对其进行初始化。
变化:
lToast.makeText(this, "Noch kein Sound geladen.", Toast.LENGTH_SHORT);
到
lToast = Toast.makeText(this, "Noch kein Sound geladen.", Toast.LENGTH_SHORT);
我不确定这是否有效,但会阻止提升NullPointerException
。
答案 2 :(得分:1)
WIIIJBD 已经a wonderful answer。
但是,在您的情况下,您可以禁用Toast
而不是屏蔽Button
。
您可以在onClick()
中禁用该按钮,然后在完成加载任何内容后再次收到回调时再将onClickListener()
设置为某个位置。
答案 3 :(得分:0)
我知道你的问题不是那个,但无论如何...我使用并推荐使用的库是Crouton,这是一个与Toast强烈相关的库,有很多自定义!< / p>
希望它有所帮助!