我正在尝试在一个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
中传递多个项目?
答案 0 :(得分:6)
您无法将字符串与==
进行比较。
if (strActStat.equals("Sedentary")) { // should work
编辑:
@Hesam写了一个非常详细的答案,但他的解决方案并不真正可用。不应使用ArrayList<String>
,而应使用putExtra(key, value)
。为什么?那么与ArrayList解决方案相比有一些优势:
put()
与get()
的顺序相同。考虑以下情况:您经常发送3个值,但在某些情况下,您不希望发送第二个值。当您使用ArrayList解决方案时,您最终会发送null
作为第二个值,以确保第三个值保留在他的位置。这是非常令人困惑的编码!相反,您应该只发送两个值,当接收活动尝试接收第二个值时,它可以像它想要的那样处理返回的空值...例如将其替换为默认值。key
应在接收活动中声明为常量。因此,您始终可以通过查看此常量来了解活动可以处理的意图数据。这是一个很好的编程!希望这有助于澄清意图用法。
答案 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 。