Android,我可以使用putExtra来传递多个值

我想把两个值传递给另一个活动,我可以用putExtra来做到这一点,或者我必须做一个更复杂的方式,这从我的阅读看起来似乎。 例如。 可以像这样的工作?

public final static String ID_EXTRA="com.fnesse.beachguide._ID"; Intent i = new Intent(this, CoastList.class); i.putExtra(ID_EXTRA, "1", "111"); startActivity(i); 

以上给出了一个错误。

编辑

我尝试的第一件事是类似于:

 i.putExtra(ID_EXTRA1, "1"); i.putExtra(ID_EXTRA2, "111"); 

但ID_EXTRA2似乎写在ID_EXTRA1

所以,

 i.putExtra(ID_EXTRA, new String[] { "1", "111"}); 

看起来像去,但如何从第二个活动中的数组中提取值,我一直在使用这个单一的值。

 passedVar = getIntent().getStringExtra(CoastList.ID_EXTRA); 

我想我必须把ID_EXTRA变成一个数组?

如果你喜欢,你可以通过一个额外的“捆绑”而不是个别的额外的,例如: –

 Intent intent = new Intent(this, MyActivity.class); Bundle extras = new Bundle(); extras.putString("EXTRA_USERNAME","my_username"); extras.putString("EXTRA_PASSWORD","my_password"); intent.putExtras(extras); startActivity(intent); 

然后在你的Activity中触发,你可以像这样引用:

 Intent intent = getIntent(); Bundle extras = intent.getExtras(); String username_string = extras.getString("EXTRA_USERNAME"); String password_string = extras.getString("EXTRA_PASSWORD"); 

或者(如果你愿意): –

 Bundle extras = getIntent().getExtras(); String username_string = extras.getString("EXTRA_USERNAME"); String password_string = extras.getString("EXTRA_PASSWORD"); 

希望这可以帮助! 🙂

您可以使用多个键传递多个值。 代替

 i.putExtra(ID_EXTRA, "1", "111"); 

 i.putExtra(ID_EXTRA1, "1"); i.putExtra(ID_EXTRA2, "111"); 

当然,你必须为键定义2个常量,并且必须在新的活动中单独读取。

或者你可以通过一个string数组

 i.putExtra(ID_EXTRA, new String[] { "1", "111"}); 

在课堂上增加额外的价值

 public class MainActivity extends Activity { public final static String USERNAME = "com.example.myfirstapp.MESSAGE"; public final static String EMAIL = "com.example.myfirstapp.EMAIL"; public void registerUser(View view) { Intent intent = new Intent(this, DisplayMessageActivity.class); EditText userNameTxt = (EditText) findViewById(R.id.editText1); EditText emailTxt = (EditText) findViewById(R.id.editText2); String userName = userNameTxt.getText().toString(); String email = emailTxt.getText().toString(); intent.putExtra(USERNAME, userName); intent.putExtra(EMAIL,email); startActivity(intent); } 

从另一个class级读取额外的值

 public class DisplayMessageActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = getIntent(); String user = intent.getStringExtra(MainActivity.USERNAME); String email = intent.getStringExtra(MainActivity.EMAIL); 

不,你不能,但你可以传递一个数组:

 public Intent putExtra (String name, String[] value) 

像这样的例子:

 i.putExtra(ID_EXTRA, new String[]{"1", "111"}); 

你的例子将不起作用,因为Extras是由一个Key和一个Value 。 你不能把一个Extra多个KeysValues

另外,就我所知(注意到),你的键需要是Strings ,但是我可能在那个上是错的。

尝试这个:

 public final static String ID_EXTRA="com.fnesse.beachguide._ID"; Intent i = new Intent(this, CoastList.class); i.putExtra("ID_Extra", ID_EXTRA); i.putExtra("1", 111); startActivity(i); 

对于一个单一的less量值putExtra是完美的,但是当你传递多个值,需要传递自定义ArrayList或List时,我认为这是一个坏主意。 解决scheme是你可以使用Parcelable 。 你也可以使用Singleton或者Serializable

Parcelable:

你需要分享的可分类课程。

  public class MyParcelable implements Parcelable { private int mData; public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { out.writeInt(mData); } public static final Parcelable.Creator<MyParcelable> CREATOR = new Parcelable.Creator<MyParcelable>() { public MyParcelable createFromParcel(Parcel in) { return new MyParcelable(in); } public MyParcelable[] newArray(int size) { return new MyParcelable[size]; } }; private MyParcelable(Parcel in) { mData = in.readInt(); } } 

在你想发送的地方组织你的活动

 MyParcelable example = new MyParcelable(); ..... ..... Bundle bundle = new Bundle(); bundle.putParcelable("example", Parcels.wrap(example)); 

从另一个你想要接收的活动

 MyParcelable example = Parcels.unwrap(getIntent().getParcelableExtra("example"));