putExtra是将数据传递给新Activity的唯一方法吗?

时间:2012-12-31 23:23:22

标签: java android

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

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

这是最好/最受欢迎(或接受的标准)?

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

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

还有其他建议吗?

5 个答案:

答案 0 :(得分:3)

我认为Squonk有一个很好的答案,但是如果您正在寻找替代方案,请考虑创建一个Settings类,其中所有设置都是成员。它可能有一个静态方法,如loadFromPreferences(Context),它将返回SettingsSharedPreferences构造的saveSettings(Context)对象,使用您需要的任何默认值。它还可以使用{{1}}方法来保存您的修改。希望有所帮助。

答案 1 :(得分:1)

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

请参阅:

Providing resources

More resource types

答案 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");

现在intentIntstaticInt都等于42;