Adesea trebuie să transmitem date între activitățile unei aplicații Android. O modalitate ușoară de a face acest lucru este cu Intent.putExtra ()
, dar dacă aveți multe date structurate, Parcelable ar putea fi o soluție mai bună. În acest post vă voi arăta cum Parcelable facilitează serializarea cursurilor pentru a împărtăși între Activități.
Parcelable este o interfață numai pentru Android. Aceasta permite dezvoltatorilor să serializeze o clasă, astfel încât proprietățile sale să fie ușor transferate de la o activitate la alta. Aceasta se face prin citirea și scrierea obiectelor din colete, care pot conține date aplatizate în containerele de mesaje.
Activitatea noastră principală se ocupă de colectarea detaliilor cărții. Să începem prin înființarea noastră onCreate
metodă.
pachet com.tutsplus.code.android.bookparcel; import șiroid.support.v7.app.AppCompatActivity; import android.os.Bundle; clasa publica MainActivity extinde AppCompatActivity @Override protejat void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); // ...
În continuare, deschideți-vă activity_main.xml pentru a configura aspectul și aspectul vizualizării. Veți avea nevoie de două câmpuri de introducere a textului și un buton pentru trimitere.
Ar trebui să arate astfel:
Deschideți acum activitatea principală și conectați câmpurile de vizualizare la activitatea dvs. Va trebui să o faceți în interiorul dvs. onCreate ()
astfel:
// ... finală EditText mBkTitle = (EditText) findViewById (R.id.title); final EditText mBkAuthor = (EditText) findViewById (R.id.author); Buton buton = (buton) findViewById (R.id.submit_button);
Pentru a termina Activitate principala
, trebuie să înființezi un onClickListener
. Acest lucru va fi numit ori de câte ori A depune butonul este apăsat. Când se întâmplă acest lucru, detaliile introduse trebuie colectate și trimise la următoarea activitate.
button.setOnClickListener (noul View.OnClickListener () @Override public void onClick (View v) Book book = Cartea nouă (mBkTitle.getText (). toString (), mBkAuthor.getText = intenție nouă (MainActivity.this, BookActivity.class); intent.putExtra ("carte", carte); startActivity (intent););
Aici, adăugați un onClickListener
la Buton
de exemplu, ați fost extrași din structura dvs. de activitate. Acest cod va fi rulat ori de câte ori A depune butonul este apăsat.
Rețineți că pur și simplu treceți Carte
exemplu la putExtra ()
. Așa cum vom vedea mai târziu, Parcelable are grijă de serializarea datelor din carte într-un șir astfel încât să poată fi transmis prin Intent.
Acum că activitatea principală este completă, trebuie să ne creăm BookActivity
precum și clasa de carte pentru a organiza informații despre cărți.
Să creăm a Carte
clasă să dețină informații despre fiecare carte.
clasa publică Carte implementează Parcelabil // carte de bază privat titlu String; autor de caractere private;
Această clasă trebuie să implementeze Parcelable
. Acest lucru va permite transmiterea datelor de la Activitate principala
la BookActivity
.
De asemenea, vom adăuga câteva funcții de achiziție standard și un constructor pentru a crea rapid o instanță a clasei.
// cartea principală constructor public (titlul șirului, autorul șirului) this.title = title; this.author = autor; // getters public String getTitle () return title; public String getAuthor () retur autor;
writeToParcel
metoda este locul în care adăugați toate datele din clasă la parcelă. Aceasta se face în vederea pregătirii pentru transfer. Această metodă va fi trecută printr-o instanță parcelă care are un număr de metode de scriere pe care le puteți utiliza pentru a adăuga fiecare câmp la parcelă. Rețineți: ordinea în care scrieți datele este importantă!
Iată cum faceți acest lucru.
// scrie valori obiect la colet pentru stocare public void writeToParcel (Parcel dest, int steaguri) dest.writeString (title); dest.writeString (autor);
La fel cum metoda de scriere se ocupă de scrierea datelor care urmează să fie transferate, constructorul este folosit pentru a citi datele transferate din parcelă serializată. Această metodă va fi solicitată activității de primire pentru colectarea datelor.
Iată cum ar trebui să arate:
cartea publică (parcela) title = parcel.readString (); autor = parcel.readString ();
Activitatea de primire va primi datele ca un șir și va apela apoi getParcelableExtra
metodă pentru a începe procesul de colectare a datelor. Asta va declanșa constructorul pe care l-am definit mai sus, care va dezerializa datele și va crea un nou Carte
instanță.
Pentru a finaliza clasa Parcelable, trebuie să creați o Parcelable.Creator
instanță și să o atribuiți CREATOR
camp. API Parcelable va căuta acest câmp atunci când are nevoie să deserializeze o instanță a clasei dvs. care a fost trecută la o altă componentă.
public static final Parcelable.CreatorCREATOR = nou Parcelable.Creator () @Override public Book createFromParcel (Parcelă parcelă) retur carte nouă (parcelă); @Override public Book [] newArray (mărime int) return New book [0]; ;
Aceasta leagă totul împreună. Funcția sa este simplă - generează instanțe ale clasei tale Parcelable de la a Colet
utilizând datele coletelor furnizate. Creatorul îl numește pe constructorul pe care l-ați definit mai sus, trecând-l a Colet
obiect, iar constructorul inițializează atributele clasei.
În cazul în care clasa Parcelable va avea clase de copii, va trebui să vă faceți o anumită atenție cu describeContents ()
metodă. Aceasta vă va permite să identificați clasa specifică de copii care ar trebui să fie creată de către Parcelable.Creator
. Puteți citi mai multe despre modul în care funcționează acest lucru în stack Overflow.
Acum putem finaliza aplicația cu Activitatea cărții. Mergeți mai departe și creați o nouă activitate goală numită BookActivity
. Asigurați-aspectul aspectului ca ceea ce am mai jos.
În activity_book.xml, ai nevoie doar de două TextView
widget-uri, care vor fi folosite pentru a arăta titlul și autorul cărților.
Acum să ne pregătim activitatea. Activitatea dvs. ar trebui să arate deja astfel:
pachet com.tutsplus.code.android.bookparcel; import șiroid.support.v7.app.AppCompatActivity; import android.os.Bundle; clasa publica BookActivity extinde AppCompatActivity @Override protejat void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_book);
În această activitate, doriți să primiți datele care au fost transmise din activitatea dvs. principală și să le afișați pe vizualizările dvs. Astfel, veți prelua instanțele dvs. TextView
folosind id-ul TextView
setat în aspectul dvs..
TextView mBkTitle = (TextView) findViewById (R.id.bk_title); TextView mBkAuthor = (TextView) findViewById (R.id.bk_author);
Apoi, bineînțeles, veți suna getIntent ()
deoarece veți obține date în această activitate. Datele pe care le veți prelua sunt colectate din clasa de carte folosind getParcelableExtra ()
. Apoi, setați valorile TextViews
la datele colectate. Iată cum se face.
Intenția intenției = getIntent (); Rezervați cartea = intent.getParcelableExtra ("Carte"); mBkTitle.setText ("Titlu:" + book.getTitle ()); mBkAuthor.setText ("Autor:" + book.getAuthor ());
Construiți-vă aplicația și lansați-o și ar trebui să vedeți puținul frumusețe pe care tocmai ați construit-o.
În acest post, ați văzut cum puteți muta cu ușurință obiecte de la o activitate la alta. Nu mai trebuie să preluați fiecare câmp de date pe care l-ați transmis separat obiectului Intent și nu trebuie să vă amintiți numele pe care l-ați trecut în fiecare câmp. Nu numai asta, dar acest proces este mai rapid decât funcționalitatea serializării Java.
În acest tutorial, ați învățat cum să utilizați Parcelable pentru a transmite date de la o activitate la alta. Puteți să vă aruncați mai adânc în Parcelable verificând documentația oficială.
Între timp, verificați câteva dintre celelalte postări despre dezvoltarea aplicațiilor Android!