2011-12-09 19 views
35

Quiero pasar dos valores a otra actividad? ¿Puedo hacer esto con putExtra o tengo que hacerlo de una manera más complicada, lo que parece por mi lectura. Por ejemplo, ¿algo así puede funcionar?Android, ¿Puedo usar putExtra para pasar múltiples valores

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

Lo anterior da un error.

Editar

Lo primero que intenté fue similar a:

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

pero ID_EXTRA2 parece a escribir sobre ID_EXTRA1

Así,

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

se parece a la ir, pero ¿cómo puedo extraer los valores? de la matriz en la segunda actividad, he estado usando esto para un solo valor.

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

Supongo que tengo que convertir ID_EXTRA en una matriz de alguna manera ???

Respuesta

21

Puede pasar múltiples valores utilizando varias teclas. En lugar de

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

hacer

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

Por supuesto, usted tiene que definir 2 constantes de las teclas y tienen que leer tanto por separado en la nueva actividad.

O puede pasar a través de una matriz de cadenas

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

I hizo una edición arriba, gracias. –

+4

@MikeClarke Asegúrese de que ID_EXTRA1 e ID_EXTRA2 no tengan los mismos valores asignados * (por ejemplo, ambos tienen 'com.fnesse.beachguide._ID') *. De lo contrario, cuentan como la misma clave, lo que activaría la sobrescritura. Y si intenta usar la matriz, use 'getIntent(). GetStringArrayExtra()' en lugar de 'getIntent(). GetStringExtra()'. –

+0

¡Gracias, funciona ahora! –

1

No, no puedes, pero se puede pasar un array usando:

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

así por ejemplo:

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

Su ejemplo no funcionará, ya que Extras están hechos de Key y Value. Usted no puede poner múltiples Keys y Values en una Extra

Además, las llaves tienen que ser Strings por lo que yo sé (y vi), pero puedo estar equivocado en eso.

Prueba esto:

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

Usted podría pasar un 'paquete' de extras en lugar de suplementos individuales si se quiere, por ejemplo: -

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

Luego, en su actividad que su activación, puede hacer referencia a ellos de esta manera: -

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

O (si lo prefiere): -

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

Espero que esto ayude! :-)

8

Poner valores extra en clase

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

    } 

Lectura de valores adicionales de otra clase

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

Para una sola pequeña cantidad de valor putExtra es perfecto, pero cuando pasan varios valores y necesita pasar ArrayList o List personalizado, entonces creo que es una mala idea. La solución es que puede usar Parcelable. Usted y también utiliza Singleton o Serializable también.

parcelable:

clase parcelable la que tiene que compartir.

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

Formar su actividad en la que desea enviar

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

De otra actividad en la que desea recibir

MyParcelable example = Parcels.unwrap(getIntent().getParcelableExtra("example")); 
Cuestiones relacionadas