web-dev-qa-db-fra.com

Android, puis-je utiliser putExtra pour transmettre plusieurs valeurs

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 ???

43
user903601

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"});
23
user658042

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! :-)

134
Steve

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);   
10
Abhi

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"});
1
gwvatieri

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);
1
Sander van't Veer

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"));
0