【问题标题】:naming convention for passing data through extras in android在 android 中通过 extras 传递数据的命名约定
【发布时间】:2011-05-24 22:38:57
【问题描述】:

在传递 Intent.putExtra("myName", myName) 等 extras 时,extra 名称的约定是什么?

ie:如果在两个活动之间传递数据,两者都会在 id“myName”下放置/提取数据,但我应该在任何地方硬编码“myName”,还是将值保留在 R.values.string 中?

【问题讨论】:

    标签: android android-intent


    【解决方案1】:

    硬编码绝对不是一个理想的解决方案。

    Android 框架中使用的约定是创建名为 EXTRA_FOO(其中 FOO 是您的密钥名称)的 public static final 常量,例如 Intent.EXTRA_ALARM_COUNT

    常量的实际值是一个名称间隔的字符串以避免冲突:"android.intent.extra.ALARM_COUNT"

    如果您不想使用常量在您的活动之间创建依赖关系,那么您应该考虑将这些键放入您的 strings.xml 文件中的字符串值中。在 xml 中定义键时,我倾向于遵循相同的命名约定:

    <string name="EXTRA_MY_NAME">com.me.extra.MY_NAME</string>
    

    从 Java 端看,它仍然像一个静态常量:

    getString(R.string.EXTRA_MY_NAME);
    

    【讨论】:

    • 本教程展示了一些使用公共静态最终字符串解决方案的示例代码:developer.android.com/training/basics/firstapp/…
    • 我想没有简单的方法可以在应用程序之间共享这些常量? (一个选择是内容提供者,但这似乎有点过头了)
    • @AlexanderMalakhov 您可以将它们放入 Android 库项目中,您的不同应用都可以使用该项目。
    • @Matteo 硬编码也很难维护。如果您想更改额外密钥的名称,那么您必须确定找到每个使用它的地方并反复进行更新(不引入任何拼写错误)。如果它是一个变量,那么你只需要在一个地方改变它的值。
    • 我不同意使用strings.xml,因为我认为它不是很干净的解决方案。我是 android 开发的新手,但 strings.xml 似乎应该只包含可在应用程序的 UI 上显示的字符串。可能需要国际化的字符串等等。相反,我会将所有密钥存储在一个单独的类中,无论是 ExtrasKeys,它应该在所有活动之间共享。
    【解决方案2】:

    我在文档中看到的唯一内容是额外的键应该从包名开始。但是我并没有完全遵循这一点,到目前为止,该应用程序运行良好。

    我宁愿在代码中使用 R.string.some_key 只是为了让它干净干燥。

    【讨论】:

    • 额外的键可以是任何字符串。使用包名只是保持密钥唯一性的好习惯。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多