我想将两个值传递给另一个活动我可以使用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"});
看起来像go,但如何在第二个活动中从数组中提取值,我一直在使用它作为单个值。
passedVar = getIntent().getStringExtra(CoastList.ID_EXTRA);
我想我必须以某种方式将ID_EXTRA变成一个数组???
答案 0 :(得分:136)
如果您愿意,可以传递额外内容的“捆绑”而不是单独的附加内容,例如: -
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");
希望这有帮助! : - )
答案 1 :(得分:23)
您可以使用多个键传递多个值。而不是
i.putExtra(ID_EXTRA, "1", "111");
做
i.putExtra(ID_EXTRA1, "1");
i.putExtra(ID_EXTRA2, "111");
当然,您必须为键定义2个常量,并且必须在新活动中单独读取。
或者您可以通过
传递字符串数组i.putExtra(ID_EXTRA, new String[] { "1", "111"});
答案 2 :(得分:11)
在课堂上加上额外的值
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);
}
从另一个类中读取额外的值
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);
答案 3 :(得分:1)
不,你不能,但你可以使用:
传递数组public Intent putExtra (String name, String[] value)
就像这样:
i.putExtra(ID_EXTRA, new String[]{"1", "111"});
答案 4 :(得分:1)
您的示例无法使用,因为Extras
是由Key
和Value
组成的。您不能将多个Keys
和Values
放在一个Extra
此外,据我所知(并注意到),你的密钥必须是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);
答案 5 :(得分:0)
对于单个少量的值 putExtra 是完美的,但是当您传递多个值并需要传递自定义 ArrayList或List 时,我认为它很糟糕理念。解决方案是您可以使用 Parcelable 。您也可以使用 Singleton 或 Serializable 。
Parcelable:
您需要分享的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"));
答案 6 :(得分:0)
为 kotlin 编码人员传递额外的包
val intent = Intent(this, MyActivity::class.java)
val extras = Bundle().apply {
putString("EXTRA_USERNAME", "my_username")
putString("EXTRA_PASSWORD", "my_password")
}
intent.putExtras(extras)
startActivity(intent)
然后在其他活动中检索您的值,如下所示:
val extras = getIntent().extras
val username_string = extras?.getString("EXTRA_USERNAME")
val password_string = extras?.getString("EXTRA_PASSWORD")