2012-02-23 23 views
5

estoy tratando de pasar una lista de arrays a mi actividad principalenviando una lista de arrays a la actividad principal

Aquí está el código simple.

private ArrayList<Receipt> receipts = new ArrayList<Receipt>(); 


Intent data = new Intent(); 
data. // what to do here? 
setResult(RESULT_OK, data); 

//************************************ 

Ésta es la clase básica recibo

public class Receipt { 


    public String referenceNo; 
    public byte[] image; 
    public String comments; 
    public Date createdOn; 
    public Date updatedOn; 

Dime cómo puedo añadir que en mi intención y cómo puedo recuperarlo de nuevo en la actividad de los padres de

onActivityResult(final int requestCode, int resultCode, final Intent data) 
+1

¿Ha marcado esta pregunta? -> http://stackoverflow.com/questions/5207510/android-passing-an-arraylist-back-to-parent-activity –

+0

http: // stackoverflow.com/questions/4626861/put-object-as-intent-for-next-activity ..... similar a este ??? –

Respuesta

3

Puede utilizar data.putExtra()/bundle.putSerializable() para poner objetos personalizados en un paquete/Intención, sin embargo, usted tiene que hacer su recibo clase implemente Serializable (sólo hay que poner implements Serializable después de que el nombre de la clase, eso es todo que hay que hacer con una clase tan simple Luego de leer de nuevo utiliza getSerializable()

Nota:.. no creo que los Date -clas s es serializable, es posible que desee reemplazar aquellos con un tiempo de representación largo en milisegundos en su lugar (puede usar Date.getTime() para eso).

Ejemplo:

public class Receipt implements Serializable{ 
    public String referenceNo; 
    public byte[] image; 
    public String comments; 
    public long createdOn; 
    public long updatedOn; 
    //... 
} 

//Put the list in the intent 
List<Receipt> list = ... 
Intent data = new Intent(); 
data.putExtra("tag", list); 

//Read the list from the intent: 
list = (List<Receipt>) data.getSerializableExtra("tag"); 
0

Usted puede simplemente pasar su ArrayList y recuperar de nuevo.

Por ejemplo:

ArrayList<Receipt> list = new ArrayList<Receipt>(); 
intent intent = new Intent(); 
intent.putExtra("Hello", list); 

Pero asegúrese de que tiene a implements Serializable interfaz en su clase de recibos.

es decir

public class Receipt implements Serializable 
0

En caso de que su ArrayList va a ser grande pasándolo como datos de intención puede causar problemas tales como la aplicación no responde. Esto se debe a que tomará tiempo para que el sistema operativo pase todos los datos.

En su lugar, puede crear su propia clase de Aplicación (también deberá registrarla en su Manifiesto). A continuación, en esta clase puede tener

class MyApplication extends Application { 
... 
public static Object mData; 
} 

Y a continuación, puede hacer MyApplication.mData = receipts y ArrayList<Receipt> receipts = (ArrayList<Receipt>)(MyApplication.mData) según corresponda.

Dado que su objeto MyApplication existirá durante todo el ciclo de vida de la aplicación, este método es lo suficientemente seguro y se recomienda en libros en Android (entre otros).

+1

este método no se recomienda – Selvin

+0

es uno de los métodos propuestos de intercambio de datos en el libro Pro Android 3 y en otros lugares. De todos modos, lo malo de este método es que no es recomendable. Intente pasar una matriz muy grande a través de datos de intención y verá el error ANR. –

+0

primero: eché un vistazo a este libro y bueno, no puedo decir cosas buenas al respecto. segundo: el objeto global no se liberará hasta el final de la aplicación. Es por eso que thrid: este problema es más complicado ... ¿por qué para FSM sake con intención de pasar gran matriz en absoluto. si hay una necesidad de esto, significa que la aplicación estaba mal diseñada. en mi opinión, en este caso deberíamos usar ContentProvider y pasar solo Uri (Intent.getData()), después de que ContentProvider "pidió" con este Uri debería devolver el cursor con todos los datos que necesitamos – Selvin

Cuestiones relacionadas