Je souhaite transmettre deux valeurs à une autre activité. Puis-je le faire avec putExtra ou dois-je le faire de manière plus compliquée, comme cela semble être le cas lors de ma lecture? E.g .. peut quelque chose comme ça fonctionne?
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);
Ce qui précède donne une erreur.
Modifier
La première chose que j'ai essayée était semblable à:
i.putExtra(ID_EXTRA1, "1");
i.putExtra(ID_EXTRA2, "111");
mais ID_EXTRA2 semble écrire sur ID_EXTRA1
Alors,
i.putExtra(ID_EXTRA, new String[] { "1", "111"});
Cela ressemble à l'aller, mais comment puis-je extraire les valeurs du tableau dans la deuxième activité? Je l'utilise pour une seule valeur.
passedVar = getIntent().getStringExtra(CoastList.ID_EXTRA);
Je suppose que je dois transformer ID_EXTRA dans un tableau en quelque sorte ???
Vous pouvez transmettre plusieurs valeurs à l'aide de plusieurs clés. Au lieu de
i.putExtra(ID_EXTRA, "1", "111");
faire
i.putExtra(ID_EXTRA1, "1");
i.putExtra(ID_EXTRA2, "111");
Bien sûr, vous devez définir 2 constantes pour les clés et les lire séparément dans la nouvelle activité.
Ou vous pouvez passer un tableau de chaînes via
i.putExtra(ID_EXTRA, new String[] { "1", "111"});
Vous pouvez passer un "lot" d’extras plutôt que d’extras individuels si vous le souhaitez, par exemple: -
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);
Ensuite, dans votre activité que votre déclenchement, vous pouvez référencer ces comme:
Intent intent = getIntent();
Bundle extras = intent.getExtras();
String username_string = extras.getString("EXTRA_USERNAME");
String password_string = extras.getString("EXTRA_PASSWORD");
Ou (si vous préférez): -
Bundle extras = getIntent().getExtras();
String username_string = extras.getString("EXTRA_USERNAME");
String password_string = extras.getString("EXTRA_PASSWORD");
J'espère que cela t'aides! :-)
Mettre des valeurs supplémentaires en classe
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);
}
Lire des valeurs supplémentaires d'une autre classe
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);
Non, vous ne pouvez pas mais vous pouvez passer un tableau en utilisant:
public Intent putExtra (String name, String[] value)
comme ceci par exemple:
i.putExtra(ID_EXTRA, new String[]{"1", "111"});
Votre exemple ne fonctionnera pas, car les Extras
sont composés de Key
et de Value
. Vous ne pouvez pas mettre plusieurs Keys
et Values
dans un Extra
De plus, vos clés doivent être Strings
pour autant que je sache (et que je sache), mais je me trompe peut-être.
Essaye ça:
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);
Pour une seule petite quantité de valeur, putExtra est parfait, mais lorsque vous transmettez plusieurs valeurs et que vous devez personnaliser ArrayList ou List, je pense que c'est une mauvaise idée. La solution est que vous pouvez utiliser Parcelable. Vous utilisez également Singleton ou Serializable également.
Colisable:
Classe parcellaire que vous devez partager.
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();
}
}
Formez votre activité où vous voulez envoyer
MyParcelable example = new MyParcelable();
.....
.....
Bundle bundle = new Bundle();
bundle.putParcelable("example", Parcels.wrap(example));
D'une autre activité où vous souhaitez recevoir
MyParcelable example = Parcels.unwrap(getIntent().getParcelableExtra("example"));