java - Android 的最佳设计实践与 Java 不同?

标签 java android design-patterns

<分区>

假设我们只想在首选项选项设置为 true 时执行某些操作。它可能是情况的类图:

class diagram

PreferencesActivitygetDoSomethingOptionValue() 的实现如下:

public boolean getDoSomethingOptionValue(){
    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getActivity()
    return settings.getString("doSomethingOptionValue", "false");
}

在 Java 中(我的意思是,没有 Android),MainActivity 应该使用 PreferencesActivity 中的 get 方法获取值:

if (PreferencesActivity.getDoSomethingOptionValue()){
    // TODO     
    executeSomething()
}

但实际上 与 Android 交流 Activity 更复杂(我喜欢 this tutorial about how to communicate two running activities )。 所以我受邀直接从 MainActivity 检查首选项。代码会更简单、更高效。它可能是这样的:

SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getActivity()
if (settings.getString("doSomethingOptionValue", "false"){
    // TODO     
    executeSomething()
}

推荐使用 Android 的做法是什么?

最佳答案

  1. “不要重复自己”的原则仍然适用,即如果您从两个位置使用相同的代码,请将其分解为一个通用方法。一个例子是 Settings 类中的静态方法:

    public class Settings {
        public static boolean getDoSomethingOptionValue(Context context) {
            SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
            return settings.getString("doSomethingOptionValue", "false");
        }
    }
    

    (当然,如果您的项目需要,更复杂的选项(非静态方法、通过依赖注入(inject)提供的设置对象)也是可能的。)

  2. 您不需要手动阅读您的PreferencesActivity 中的设置,addPreferencesFromResource可以为您做到这一点。

关于java - Android 的最佳设计实践与 Java 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21333363/

相关文章:

java - 字符串和映射比较

android - 使用apktool反编译报错

java - Android:可以从我自己的应用程序启动其他应用程序的任何 Activity 吗?

c++ - 类层次结构设计,避免从基类到派生类的向下转型

design-patterns - 也不要在软件中产生未知的途径吗? [丰田原则]

Java 输入运行错误

java - Android:访问安全的 xml 文件

java - While 循环不重复

android - 如果 Android Gradle Build 中不存在默认属性文件,我该如何创建它

c# - 您创建实例以调用静态方法的模式的名称