我在不同的Activities
上使用共享的Toast
,以便只显示最新的消息,立即丢弃任何以前的消息。我把代码放在自定义Application
对象:
public class GameApp extends Application {
private Toast mToast;
@Override
public void onCreate() {
super.onCreate();
mToast = Toast.makeText(getApplicationContext(), "", Toast.LENGTH_SHORT);
}
public void displayToast(int textId) {
displayToast(getText(textId));
}
public void displayToast(CharSequence text) {
mToast.cancel();
mToast.setText(text);
mToast.show();
}
}
Toast
出现在我的1.6
, 2.2
和3.0
模拟器上。但当我从市场下载发布的应用程序时,它只显示在我的G1 (CyanMod 6.1
)上,而不是Xoom (3.0.1
)上。我试着用USB调试连接Xoom,但在LogCat
中没有任何相关显示。
在此之前,我用传统的方式做Toast
(即通过Toast.makeText()
),这一切都如预期的那样工作。
我上面的代码可能有任何潜在的问题,或者这可能是Xoom的错误?这是我的应用程序的链接,如果你想测试它。当您在主屏幕中单击Today
, Progress
时,Toast
应该会出现。谢谢你的帮助。非常感谢
我不确定,但摩托罗拉使用的SDK可能不同。mToast.cancel()
可能会做一些可怕的事情…你试过这个吗?
public void displayToast(CharSequence text) {
mToast.setText(text);
mToast.show();
}
这是因为mToast.cancel();
可能会关闭toast,如果它显示,或者不显示它,如果它还没有显示
请在用户点击按钮时创建新的Toast对象。并保留之前的Toast对象引用。下次当用户点击按钮时,取消之前的Toast对象并重新创建新的Toast
public class GameApp extends Application {
private Toast mToast;
private Context mContext;
@Override
public void onCreate() {
super.onCreate();
mToast = Toast.makeText(getApplicationContext(), "", Toast.LENGTH_SHORT);
}
public void displayToast(int textId,Context mContext) {
this.mContext = mContext;
displayToast(getText(textId));
}
public void displayToast(CharSequence text) {
mToast.cancel();
mToast = new Toast(mContext);
mToast.setText(text);
mToast.setDuration(Toast.LENGTH_SHORT);
mToast.show();
}
}