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..
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..
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.
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;
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);
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.
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.creatorCREADOR = 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.
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..
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!