我为自己的应用创建了一个SettingsActivity。在此Activity
我使用SharedPreferences
类来处理用户可编辑的首选项。
在设置SharedPreferences
时,我必须在我的主要活动的onCreate
中加载它们,然后再在SettingsActivity中加载它们。可能是对getXXXX()
方法的调用都需要默认值,我认为将默认值硬编码到两个地方并不好,因为我想如果我改变它将来会有问题它们。
这是最好/最受欢迎(或接受的标准)?
创建一个全局变量类,我在其中导入每个活动并在那里定义我的默认常量?
使用putExtra
和getExtra
将数据从主要活动传递到设置活动?
还有其他建议吗?
答案 0 :(得分:3)
我认为Squonk有一个很好的答案,但是如果您正在寻找替代方案,请考虑创建一个Settings
类,其中所有设置都是成员。它可能有一个静态方法,如loadFromPreferences(Context)
,它将返回Settings
从SharedPreferences
构造的saveSettings(Context)
对象,使用您需要的任何默认值。它还可以使用{{1}}方法来保存您的修改。希望有所帮助。
答案 1 :(得分:1)
就个人而言,在这种情况下,我将默认值放在资源文件中。这样就不需要使用全局变量类或辅助类。 Android资源已经为您做到了。
请参阅:
答案 2 :(得分:0)
不是使用具有静态值的类,而是为什么不扩展Application类,它将始终存在于应用程序的进程中。你可以在其中保留共享方法和变量
答案 3 :(得分:0)
我强烈建议在两个活动的onCreate中打开SharedPreference。每次我尝试使用全局变量时,这些值都会以难以检测和修复的方式消失。活动在关闭时会被销毁。可以随时从内存中删除服务。如果您的服务正在休眠且内存中没有活动,则应用程序上下文将被销毁。
话虽如此,在应用程序上下文中放置一个变量可能是最好的地方。创建一个扩展Application的类并设置AndroidManifest.xml以使用它。如果您尝试从服务或广播接收器中使用它,请不要指望该值存在。
此外,除非您在加载活动时遇到问题,否则最好花些时间在功能上而不是优化。
答案 4 :(得分:-2)
您可以将对象声明为public static
并从另一个类引用它们。
ActivityA:
public static int testIntegerA = 42;
Intent intentInteger = new Intent(getActivityContext(), ActivityB.class);
intentInteger.putExtra("INTENT_EXTRA", testIntegerA);
startActivity(intentInteger);
ActivityB:
public static int intentInt, staticInt;
staticInt = ActivityA.testIntegerA;
intentInt = getIntent().getExtras().getInt("INTENT_EXTRA");
现在intentInt
和staticInt
都等于42;