1

我为我的应用创建了一个 SettingsActivity。在此Activity,我使用SharedPreferences该类来处理用户可编辑的首选项。

在设置时SharedPreferences,我必须将它们加载到onCreate我的主要活动中,然后再次加载到 SettingsActivity 中。可能是对getXXXX()方法的两个调用都需要默认值,我认为将默认值硬编码到这两个地方是不好的,因为我想如果我改变它们将来会出现问题。

这样做最好/最流行(或公认的标准)是什么?

  • 创建一个全局变量类,我将在其中导入每个活动并在其中定义我的默认常量?

  • 使用putExtraandgetExtra将数据从主要活动传递到设置活动?

还有其他建议吗?

4

5 回答 5

3

我认为 Squonk 有一个很好的答案,但如果您正在寻找替代方案,请考虑创建一个Settings将您的所有设置作为成员的类。它可以有一个像这样的静态方法loadFromPreferences(Context),它将返回一个Settings从 构造的对象SharedPreferences,使用您需要的任何默认值。它还可以有一种saveSettings(Context)方法来保存您的编辑。希望有帮助。

于 2013-01-01T00:14:37.930 回答
1

就个人而言,在这种情况下,我会将默认值放在资源文件中。这样就不需要使用全局变量类或辅助类。Android 资源已经为您做到了。

看:

提供资源

更多资源类型

于 2013-01-01T00:01:19.403 回答
0

为什么不扩展应用程序类,而不是使用具有静态值的类,该类将在应用程序进程存在时始终存在。您可以在其中保留共享方法和变量

于 2013-01-01T00:15:21.617 回答
0

我强烈建议在两个活动的 onCreate 中打开 SharedPreference。每次我尝试使用全局变量时,这些值都会以一种难以检测和修复的方式消失。活动在关闭时被销毁。服务可以随时从内存中删除。如果您的服务正在休眠并且内存中没有活动,则应用程序上下文将被销毁。

话虽如此,在应用程序上下文中放置一个变量可能是最好的地方。创建一个扩展 Application 的类并将 AndroidManifest.xml 设置为使用它。如果您尝试从服务或广播接收器中使用它,请不要期望该值存在。

此外,除非您遇到活动加载太慢的问题,否则最好将时间花在功能上而不是优化上。

于 2013-01-01T00:20:05.060 回答
-2

您可以将对象声明为public static并从另一个类中引用它们。

活动A:

public static int testIntegerA = 42;

Intent intentInteger = new Intent(getActivityContext(), ActivityB.class);
intentInteger.putExtra("INTENT_EXTRA", testIntegerA);
startActivity(intentInteger);

活动B:

public static int intentInt, staticInt;

staticInt = ActivityA.testIntegerA;
intentInt = getIntent().getExtras().getInt("INTENT_EXTRA");

现在两者都intentInt等于staticInt42;

于 2012-12-31T23:54:57.683 回答