将多个数据传递给活动?

Rad*_*uan 1 android android-intent android-activity

我正在尝试将多个数据项合并为一个Intent:

if (strActStat == "Sedentary") {
    // passactStat.putString("keySedentary", strActStat);
    // passSeden.putString("keyMale", gender);
    i = new Intent(CalorieTrackerTargetWeight.this, TargetWeightResults.class);
    i.putExtra("keyGender", gender);
    i.putExtra("keyAct", strActStat);
    //i.putExtra("keyAct", strActStat);

    startActivity(i);
}
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用?为什么我不能在一个中传递多个项目Intent

War*_*ith 6

你无法比较字符串==.

if (strActStat.equals("Sedentary")) { // should work
Run Code Online (Sandbox Code Playgroud)

编辑:

@Hesam写了一个非常详细的答案,但他的解决方案并不真正可用.而不是使用ArrayList<String>你应该坚持putExtra(key, value).为什么?那么与ArrayList解决方案相比有一些优势:

  1. 您不仅限于ArrayList的类型
  2. 您不必在列表中保留静态订单.由于您只能使用索引值来获取列表,因此需要确保列表put()的顺序与get().考虑以下情况:您经常发送3个值,但在某些情况下,您不希望发送第二个值.当您使用ArrayList解决方案时,您最终将null作为第二个值发送,以确保第三个值将保留在他的位置.这是非常令人困惑的编码!相反,您应该只发送两个值,当接收活动尝试接收第二个值时,它可以像它想要的那样处理返回的空值...例如将其替换为默认值.
  3. 密钥的命名将授予您始终知道内部应该是什么的知识...
  4. key应该在接收活动中声明为常量.因此,您始终可以通过查看此常量来了解活动可以处理的意图数据.这是很好的编程!

希望这有助于澄清意图用法.