Je veux passer deux valeurs à une autre activité, puis-je le faire avec putExtra ou dois-je le faire de manière plus compliquée, ce qui semble être le cas depuis ma lecture. Par exemple. Est-ce que quelque chose comme ça peut fonctionner?
public final static Ssortingng 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 similaire à:
i.putExtra(ID_EXTRA1, "1"); i.putExtra(ID_EXTRA2, "111");
mais ID_EXTRA2 semble écrire sur ID_EXTRA1
Alors,
i.putExtra(ID_EXTRA, new Ssortingng[] { "1", "111"});
On dirait le go mais comment puis-je extraire les valeurs du tableau dans la deuxième activité, je l’ai utilisé pour une seule valeur.
passedVar = getIntent().getSsortingngExtra(CoastList.ID_EXTRA);
Je suppose que je dois transformer ID_EXTRA en une sorte de tableau ???
Vous pouvez passer un «lot» d’extras plutôt que des extras individuels si vous le souhaitez, par exemple: –
Intent intent = new Intent(this, MyActivity.class); Bundle extras = new Bundle(); extras.putSsortingng("EXTRA_USERNAME","my_username"); extras.putSsortingng("EXTRA_PASSWORD","my_password"); intent.putExtras(extras); startActivity(intent);
Ensuite, dans votre activité que votre déclenchement, vous pouvez vous référer à ceux-ci comme suit: –
Intent intent = getIntent(); Bundle extras = intent.getExtras(); Ssortingng username_ssortingng = extras.getSsortingng("EXTRA_USERNAME"); Ssortingng password_ssortingng = extras.getSsortingng("EXTRA_PASSWORD");
Ou (si vous préférez): –
Bundle extras = getIntent().getExtras(); Ssortingng username_ssortingng = extras.getSsortingng("EXTRA_USERNAME"); Ssortingng password_ssortingng = extras.getSsortingng("EXTRA_PASSWORD");
J’espère que cela t’aides! 🙂
Vous pouvez transmettre plusieurs valeurs en utilisant 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 Ssortingng[] { "1", "111"});
Mettre des valeurs supplémentaires en classe
public class MainActivity extends Activity { public final static Ssortingng USERNAME = "com.example.myfirstapp.MESSAGE"; public final static Ssortingng 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); Ssortingng userName = userNameTxt.getText().toSsortingng(); Ssortingng email = emailTxt.getText().toSsortingng(); 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(); Ssortingng user = intent.getSsortingngExtra(MainActivity.USERNAME); Ssortingng email = intent.getSsortingngExtra(MainActivity.EMAIL);
Non, vous ne pouvez pas mais vous pouvez passer un tableau en utilisant:
public Intent putExtra (Ssortingng name, Ssortingng[] value)
comme ceci par exemple:
i.putExtra(ID_EXTRA, new Ssortingng[]{"1", "111"});
Votre exemple ne fonctionnera pas, puisque les Extras
sont constitués d’une Key
et d’une Value
. Vous ne pouvez pas mettre plusieurs Keys
et Values
dans une seule Extra
De plus, vos clés doivent être des Ssortingngs
à ma connaissance (et remarquées), mais je me trompe peut-être.
Essaye ça:
public final static Ssortingng 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 petite quantité de valeur, putExtra est parfait, mais lorsque vous transmettez plusieurs valeurs et que vous devez transmettre ArrayList ou List personnalisé, je pense que c’est une mauvaise idée. La solution est que vous pouvez utiliser Parcelable . Vous et utilisez également Singleton ou Serializable aussi.
Parcelable:
Classe parcellable 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 CREATOR = new Parcelable.Creator () { 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 souhaitez envoyer
MyParcelable example = new MyParcelable(); ..... ..... Bundle bundle = new Bundle(); bundle.putParcelable("example", Parcels.wrap(example));
D’une autre activité où vous voulez recevoir
MyParcelable example = Parcels.unwrap(getIntent().getParcelableExtra("example"));