从共享首选项中打开/关闭Toast?

6

有没有一种方法可以在共享首选项中使用复选框全局开启和关闭toast通知?

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

我在考虑创建一个类:

boolean showToast(){
 //code
}

但是,思路上,SO 可能有一个全局解决方案吗?

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

有什么想法吗?


你走在正确的道路上。我也是用类似的方法解决的,在我的设置视图中添加了一个按钮来切换“showToast”。我还包装了“Toast.makeText()”,以便每次都可以检查它,而不需要重复每次都写“if(showToast) { ... }”。 - ConcurrentHashMap
5个回答

1
你可以考虑扩展Toast来创建自定义类,该类足够智能,在显示Toast之前读取用户偏好设置。
然后重构代码,用SmartToast替换Toast。
所以要实现SmartToast.makeText()来返回SmartToast的实例,并覆盖show()方法如下:
@Override
public void show() {
    if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean("showToast", true)) {
        super.show();
    }
}

0
为什么不将复选框的值放入共享首选项中,然后将其用作标志,例如:如果(flag){显示toast},这不是一样的吗?

0

您只能像您现在所做的那样,仅针对您的应用程序禁用或启用 toast 通知...但不能全局地为所有应用程序禁用或启用。


0

使用 onSharedPreferenceChangeListener。


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()方法中实现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接