6

有没有办法使用共享首选项中的复选框全局打开和关闭 toast 通知?

PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
        boolean showToast = myPrefs.getBoolean("showToast",
                true);

我在想也许可以上课:

boolean showToast(){
 //code
}

但是想一想,SO 可能有一个全球性的解决方案?

我应该使用不同类型的通知系统吗?

有什么想法吗?

4

5 回答 5

1

您可以考虑扩展 Toast 以创建您的自定义类,该类足够聪明,可以在显示 toast 之前读取用户偏好。

然后重构您的代码以将 Toast 替换为 SmartToast。

SmartToast.makeText(this, "message", Toast.LENGTH_SHORT).show();

所以实现 SmartToast.makeText() 以返回 SmartToast 的实例并覆盖 show() 如下:

@Override
public void show() {
    if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean("showToast", true)) {
        super.show();
    }
}
于 2013-03-03T20:40:16.487 回答
0

使用 onSharedPreferenceChangeListener。

于 2013-03-03T17:38:49.520 回答
0

您只能像您这样做的方式那样为您的应用程序禁用或启用 toast 通知……但不能对所有应用程序全局启用

于 2013-03-03T16:57:55.657 回答
0

为什么不将复选框值放在共享首选项中,然后使用 is 作为标志,例如 If(flag) { show toast},这不一样吗?

于 2013-03-03T16:55:38.730 回答
0

您可以尝试使用一个元素创建一个枚举 -

public enum YourSingleton {
INSTANCE;    // element in this enum

public static void makeToast(Context context, String msg) {
    Toast toast = Toast.makeText(context, msg, Toast.LENGTH_LONG);
    toast.show();
}

} 然后调用 -

 YourSingleton .makeToast(this, "Toast Message");

当您想要打开或关闭时 - 您可以简单地在makeToast()方法中执行此操作。

于 2013-03-03T17:03:32.517 回答