2011-11-13 7 views
9

Sé que puede pasar una lista de matriz de String por intención, pero ¿y si es una lista de arreglos de algún objeto que definí? Diga una lista de Bicyles, ¿cómo hago esto?Array Lista de objetos a través del intento

+0

Usted puede tomar una clase estática –

Respuesta

17

Puede hacer que sus objetos implementen Parcelable y usen putParcelableArrayListExtra. Alternativamente, puede serializar sus objetos de alguna manera y poner la matriz de bytes de sus objetos serializados.

+11

algo de código ejemplo ayudaría – adit

+0

@adit - Para un ejemplo de código de hacer algo Parcelable, mire [docs for Parcelable] (http://developer.android.com/reference/android/os/Parcelable.html). Luego puede usar una ArrayList en una llamada a 'putParcelableArrayListExtra()'. –

+0

teniendo problemas ya que mi objeto tiene un objeto Location, por lo que no sé cómo manejarlo en el método writeToParcel – adit

17

Este es un ejemplo. MainActivity envía la lista de personas al OtherActivity a través del Intent.

class Person implements Serializable { 
    int id; 
    String name; 

    Person(int i, String s) { 
     id = i; 
     name = s; 
    } 
} 

public class TestAndroidActivity extends Activity { 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     ArrayList<Person> list = new ArrayList<Person>(); 
     list.add(new Person(1, "Tom")); 
     list.add(new Person(5, "John")); 

     Intent intent = new Intent(this, OtherActitity.class); 
     intent.putExtra("list", list); 
     startActivity(intent); 

OtherActivity.java

import java.util.ArrayList; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.widget.Toast; 

public class OtherActitity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.other); 

     Intent i = getIntent(); 
     ArrayList<Person> list = (ArrayList<Person>) i 
       .getSerializableExtra("list"); 
     Toast.makeText(this, list.get(1).name, Toast.LENGTH_LONG).show(); 

    } 
} 
+4

Tenga en cuenta que usar * Serializable * para esto implica una penalización de rendimiento, por lo que en realidad debería usar * Parcelable *. – JimmyB

+0

Gracias por la información. – wannik

+5

'intent.putExtra (" list ", list);' me da un error: 'no puedo resolver el método' –

3

Una mejor idea es implementar la interfaz parcelable para el objeto cuyo ArrayList que desea poner en el Ejemplo Intención .Por:

persona clase pública implementa parcelable {

private int id; 
private String name; 
public int getId() { 
    return id; 
} 
public void setId(int id) { 
    this.id = id; 
} 
public String getName() { 
    return name; 
} 
public void setName(String name) { 
    this.name = name; 
} 
@Override 
public int describeContents() { 
    return this.hashCode(); 
} 
@Override 
public void writeToParcel(Parcel dest, int flags) { 
    dest.writeInt(id); 
    dest.writeString(name); 
} 

}

Y luego el código de la aplicación se puede decir:

bundlelableArrayList ("personList", personList);

+0

Eso es lo que dice la primera respuesta. –

6

Una forma más - puede serializar lista de objetos en una especie de representación de cadena (que sea JSON) y luego recuperar el valor de cadena volver a la lista

// here we use GSON to serialize mMyObjectList and pass it throught intent to second Activity 
String listSerializedToJson = new Gson().toJson(mMyObjectList); 
intent.putExtra("LIST_OF_OBJECTS", listSerializedToJson); 
startActivity(intent); 

// in second Activity we get intent and retrieve the string value (listSerializedToJson) back to list 
String listSerializedToJson = getIntent().getExtras().getString("LIST_OF_OBJECTS"); 
mMyObjectList = new Gson().fromJson(objectsInJson, MyObject[].class); // in this example we have array but you can easy convert it to list - new ArrayList<MyObject>(Arrays.asList(mMyObjectList)); 
Cuestiones relacionadas