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
多个Keys
和Values
另外,就我所知(注意到),你的键需要是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"));