2011-12-09 13 views
35

Voglio passare due valori a un'altra attività posso farlo con putExtra o devo farlo in un modo più complicato, che sembra dalla mia lettura. Ad esempio ... può qualcosa come questo?Android, Posso usare putExtra per passare più valori

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

Quanto sopra restituisce un errore.

Modifica

La prima cosa che ho provato è stato simile a:

i.putExtra(ID_EXTRA1, "1"); 
i.putExtra(ID_EXTRA2, "111"); 

ma ID_EXTRA2 sembra sovrascrivere ID_EXTRA1

Quindi,

i.putExtra(ID_EXTRA, new String[] { "1", "111"}); 

si presenta come il vai ma come faccio a estrarre i valori dall'array nella seconda attività, l'ho usato per un singolo valore.

passedVar = getIntent().getStringExtra(CoastList.ID_EXTRA); 

mi sa che devo trasformare ID_EXTRA in un array in qualche modo ???

risposta

21

È possibile passare più valori utilizzando più chiavi. Invece di

i.putExtra(ID_EXTRA, "1", "111"); 

fare

i.putExtra(ID_EXTRA1, "1"); 
i.putExtra(ID_EXTRA2, "111"); 

Naturalmente è necessario definire 2 costanti per le chiavi e devono leggere sia separatamente nella nuova attività.

Oppure si può passare un array di stringhe tramite

i.putExtra(ID_EXTRA, new String[] { "1", "111"}); 
+0

I fatto una modifica sopra, grazie. –

+4

@MikeClarke Assicurarsi che ID_EXTRA1 e ID_EXTRA2 non hanno gli stessi valori ad essi assegnati * (es. Entrambi hanno 'com.fnesse.beachguide._ID') *. Altrimenti contano come la stessa chiave, che innescherebbe la sovrascrittura. E se si tenta di utilizzare la matrice, utilizzare 'getIntent(). GetStringArrayExtra()' invece di 'getIntent(). GetStringExtra()'. –

+0

Grazie, funziona ora! –

1

No non si può, ma si può passare un array utilizzando:

public Intent putExtra (String name, String[] value) 

in questo modo, per esempio:

i.putExtra(ID_EXTRA, new String[]{"1", "111"}); 
1

Il tuo esempio non funzionerà, dal momento che il Extras è composto da un Key e un Value. Non puoi inserire più Keys e Values in una Extra

Inoltre, le chiavi devono essere Strings per quanto ne so (e notai), ma potrei sbagliarmi su quello.

Prova questo:

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); 
112

si poteva passare un 'fascio' di extra piuttosto che i singoli extra, se volete, per esempio: -

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

Poi, nel tuo attività che il vostro innesco, è possibile fare riferimento questi in questo modo: -

Intent intent = getIntent(); 
Bundle extras = intent.getExtras(); 
String username_string = extras.getString("EXTRA_USERNAME"); 
String password_string = extras.getString("EXTRA_PASSWORD"); 

Oppure (se preferite): -

Bundle extras = getIntent().getExtras(); 
String username_string = extras.getString("EXTRA_USERNAME"); 
String password_string = extras.getString("EXTRA_PASSWORD"); 

Spero che questo aiuti! :-)

8

Mettere valori supplementari in 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); 

    } 

Lettura valori aggiunti da un'altra 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); 
0

Per una singola piccola quantità di valore putExtra è perfetto, ma quando si passa più valori e la necessità di passare personalizzati ArrayList o List allora penso che sia una cattiva idea. Soluzione è possibile utilizzare Parcelable. Tu e anche utilizzare Singleton o Serializable anche.

Parcelable:

classe Parcelable che è necessario condividere.

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(); 
    } 
} 

Formare la vostra attività in cui si desidera inviare

MyParcelable example = new MyParcelable(); 
..... 
..... 
Bundle bundle = new Bundle(); 
bundle.putParcelable("example", Parcels.wrap(example)); 

Da un'altra attività in cui si desidera ricevere

MyParcelable example = Parcels.unwrap(getIntent().getParcelableExtra("example")); 
Problemi correlati