4

我使用 shared Toastacross differentActivities以便只显示最新消息,立即丢弃任何以前的消息。我将代码放在自定义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.62.2、 和3.0模拟器 上。但是当我从 Market 下载已发布的应用程序时,它只显示在我的 G1 ( CyanMod 6.1) 上,而不显示在 Xoom ( 3.0.1) 上。我尝试使用 USB 调试连接 Xoom,但LogCat.

在此之前,我曾经使用Toast传统的方式(即 via Toast.makeText())并且按预期工作。

我上面的代码是否有任何潜在问题,或者这可能是 Xoom 中的错误?这是我的应用程序的链接,以防您想测试它。当您在主屏幕中Toast单击 时,应该会显示TodayProgress我很感激任何帮助。非常感谢你 :)

4

3 回答 3

2

我不确定,但摩托罗拉使用的 sdk 可能不同..并且mToast.cancel()可能会做一些可怕的事情..所以你试过这个..

public void displayToast(CharSequence text) {

        mToast.setText(text);
        mToast.show();
    }
于 2011-08-04T12:24:52.737 回答
2

这是因为mToast.cancel();如果它正在显示,它可能会关闭 toast,或者如果它尚未显示,则不显示它。

当用户单击按钮时,请创建新的 Toast 对象。并保留之前的 Toast 对象引用。下次用户单击按钮时,取消之前的 Toast 对象并再次创建新的 Toast。

于 2011-08-04T13:01:47.507 回答
1
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();
    }
}
于 2011-08-05T11:00:51.800 回答