Cómo pasar datos entre actividades con Android parcelable

Introducción

A menudo necesitamos pasar datos entre Actividades de una aplicación de Android. Una forma fácil de hacer esto es con Intent.putExtra (), pero si tiene que pasar muchos datos estructurados, Parcelable puede ser una mejor solución. En esta publicación, le mostraré cómo Parcelable facilita la serialización de clases para compartir entre Actividades..

Por que parcelable?

Parcelable es una interfaz solo para Android. Permite a los desarrolladores serializar una clase para que sus propiedades se transfieran fácilmente de una actividad a otra. Esto se hace mediante la lectura y escritura de objetos de parcelas, que pueden contener datos acoplados dentro de los contenedores de mensajes.. 

Creación de la actividad principal y el diseño

Nuestra actividad principal se encargará de la recopilación de los detalles del libro. Vamos a empezar por configurar nuestra onCreate método.

paquete com.tutsplus.code.android.bookparcel; importar android.support.v7.app.AppCompatActivity; importar android.os.Bundle; la clase pública MainActivity extiende AppCompatActivity @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); //…

A continuación, abrir activity_main.xml para configurar el diseño y la apariencia de la vista. Necesitará dos campos de entrada de texto y un botón para enviar.

Debe tener un aspecto como este:

    

Ahora abra su Actividad principal y vincule los campos de vista a su actividad. Tendrás que hacerlo dentro de tu onCreate () método, como este:

 // ... final EditText mBkTitle = (EditText) findViewById (R.id.title); final EditText mBkAuthor = (EditText) findViewById (R.id.author); Button button = (Button) findViewById (R.id.submit_button);

Para terminar Actividad principal, necesitas configurar un onClickListener. Esto será llamado siempre que el Enviar se presiona el botón Cuando eso suceda, los detalles ingresados ​​se recopilarán y se enviarán a la siguiente actividad..

 button.setOnClickListener (new View.OnClickListener () @Override public void onClick (View v) Libro = libro nuevo (mBkTitle.getText (). toString (), mBkAuthor.getText (). toString ()) = nueva intención (MainActivity.this, BookActivity.class); intent.putExtra ("Libro", libro); startActivity (intent););

Aquí, usted agrega una onClickListener al Botón instancia que recuperó de su diseño de actividad. Este código se ejecutará cada vez que el Enviar se hace clic en el botón. 

Tenga en cuenta que simplemente pasamos el Libro instancia a putExtra (). Como veremos más adelante, Parcelable se encarga de serializar los datos del libro a una cadena para que se pueda pasar a través del Intent.

Ahora que la actividad principal está completa, necesitamos crear nuestra BookActivity así como la clase de libro para mantener la información del libro.

Crear la clase de libro

Vamos a crear un Libro clase para mantener información sobre cada libro.

la clase pública Book implementa Parcelable // book basics private String title; autor de cuerdas privado; 

Esta clase necesita implementar Parcelable. Esto permitirá el paso de los datos de Actividad principal a BookActivity.

También agregaremos algunas funciones estándar de obtención y un constructor para crear rápidamente una instancia de la clase..

 // principal constructor público Libro (Título de cadena, autor de cadena) this.title = title; this.author = autor;  // getters public String getTitle () return title;  public String getAuthor () return author; 

Escribir a la parcela

los writeToParcel El método es donde usted agrega todos los datos de su clase a la parcela. Esto se hace en preparación para la transferencia. A este método se le pasará una instancia de parcela que tiene varios métodos de escritura que puede usar para agregar cada campo a la parcela. Cuidado: el orden en que se escriben los datos es importante!

Así es como lo haces..

 // escribir los valores de los objetos en la parcela para el almacenamiento public void writeToParcel (Parcel dest, int flags) dest.writeString (title); dest.writeString (autor); 

Leer datos de vuelta de la parcela

Al igual que el método de escritura maneja la escritura de los datos a transferir, el constructor se usa para leer los datos transferidos desde la Parcela serializada. Este método se llamará en la actividad de recepción para recopilar los datos.

Así es como debe verse:

 Libro público (paquete de parcela) title = parcel.readString (); author = parcel.readString (); 

La Actividad receptora obtendrá los datos como una cadena, y luego llamará al getParcelableExtra Método para iniciar el proceso de recopilación de los datos. Eso activará el constructor que definimos anteriormente, que deserializará los datos y creará una nueva Libro ejemplo. 

Creador. Creador

Para completar tu clase de Parcelable, necesitas crear un Creador. Creador instancia y asignarlo a la CREADOR campo. La API parcelable buscará este campo cuando necesite deserializar una instancia de su clase que se haya pasado a otro componente.

 final estática pública parcelable.creator CREADOR = nuevo Parcelable.Creator() @Override public Book createFromParcel (Parcel parcel) return new Book (parcel);  @Override public Book [] newArray (tamaño int) return new Book [0]; ;

Esto une a todos juntos. Su trabajo es simple: genera instancias de su clase Parcelable desde un Paquete utilizando los datos de parcela proporcionados. El creador llama al constructor que definiste anteriormente, pasándole un Paquete objeto, y el constructor inicializa los atributos de clase.

Si su clase de Parcelable tendrá clases para niños, deberá tener un cuidado especial con el Describir los contenidos () método. Esto le permitirá identificar la clase secundaria específica que debe crear el Creador. Creador. Puedes leer más sobre cómo funciona esto en Stack Overflow.

Actividad de libro y diseño

Ahora podemos completar nuestra aplicación con el libro Actividad. Sigue adelante y crea una nueva actividad vacía llamada BookActivity. Haz que el diseño se vea como lo tengo debajo.

    

En el activity_book.xml, solo necesitas dos Vista de texto Widgets, que se utilizarán para mostrar el título y el autor de los libros..

Ahora vamos a configurar nuestra actividad. Tu actividad ya debería verse así:

paquete com.tutsplus.code.android.bookparcel; importar android.support.v7.app.AppCompatActivity; importar android.os.Bundle; la clase pública BookActivity extiende AppCompatActivity @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_book); 

En esta actividad, desea recibir los datos que se pasaron de su Actividad principal y mostrarlos en sus vistas. Así recuperarás las instancias de tu Vista de texto usando el id del Vista de texto establecer en su diseño.

 TextView mBkTitle = (TextView) findViewById (R.id.bk_title); TextView mBkAuthor = (TextView) findViewById (R.id.bk_author);

Entonces, por supuesto, vas a llamar getIntent () porque estarás recuperando datos en esta actividad. Los datos que recuperará se recopilan de la clase Libro utilizando getParcelableExtra (). A continuación, establece los valores de la Visiones de texto a los datos que recopilaste. Así es como se hace..

 Intención intención = getIntent (); Libro libro = intent.getParcelableExtra ("Libro"); mBkTitle.setText ("Title:" + book.getTitle ()); mBkAuthor.setText ("Autor:" + book.getAuthor ());

Cree su aplicación y ejecútela, y debería ver la pequeña belleza que acaba de construir..

Conclusión

En esta publicación, has visto cómo puedes mover fácilmente objetos de una actividad a otra. Ya no tiene que recuperar cada campo de datos que pasó al objeto de Intención por separado, y no tiene que recordar el nombre con el que pasó cada campo. No solo eso, sino que este proceso es más rápido que la funcionalidad de serialización de Java..

En este tutorial, ha aprendido a usar Parcelable para pasar datos de una actividad a otra. Puede profundizar en Parcelable consultando la documentación oficial.. 

Mientras tanto, echa un vistazo a algunas de nuestras otras publicaciones sobre el desarrollo de aplicaciones para Android!