将多个数据传递给活动?

时间:2012-09-02 08:40:50

标签: 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);
}

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

4 个答案:

答案 0 :(得分:6)

您无法将字符串与==进行比较。

if (strActStat.equals("Sedentary")) { // should work

编辑:

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

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

答案 1 :(得分:1)

我认为这不是唯一的问题,首先,if (strActStat == "Sedentary")这是错误的。你不能用这种方式比较字符串。因为这样对象不比较字符串。正确的方法是if (strActStat.equalIgnoreCase("Sedentary"))

如果您使用Parcelable,那么您只需1次意图即可传递多个数据。

您也可以使用ArrayList<String>。 以下是您需要的代码框架:

声明清单

private List<String> test;

初始名单在适当的地方

test = new ArrayList<String>();

并根据需要添加数据进行测试。

传递意图如下:

Intent intent = getIntent();
intent.putStringArrayListExtra("test", (ArrayList<String>) test);

按如下方式检索数据:

ArrayList<String> test = data.getStringArrayListExtra("test");

希望有所帮助。

答案 2 :(得分:0)

试试这个:

done.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                namevalue=name.getText().toString();
                overvalue=over.getText().toString();
                audiostatus=audio.getText().toString();
                Intent intent=new Intent(Settings.this,home.class);
                 Bundle bundle = new Bundle();   
                 bundle.putString( "namevalue",namevalue);  
                 bundle.putString("overvalue",overvaluse);
                 bundle.putInt("value",variablename);
                 intent.putExtras(bundle);   
                 startActivity(intent);                 
                }
            });

答案 3 :(得分:0)

我遇到了同样的问题。 我的错误是我转移的变量之一未初始化。 在您的情况下喜欢性别 strActStat