Documente Academic
Documente Profesional
Documente Cultură
Fragments
Un fragment reprezintă o porțiune dintr-un Activity. Într-un activity se pot combina mai multe
fragmente ți un fragment se poate reutiliza în activități multiple. Un fragment poate fi privit ca
secțiunea modulară a unei activități care are propriul său ciclu de viață, primește propriile
evenimente de intrare și care poate fi adăugată sau eliminată în timp ce activitatea se execută.
(sursa: android.com)
Un fragment poate fi adăugat unui Activity direct în fișierul xml (layout) cu tagul <fragment>,
sau din cod prin adăugarea acestuia la un ViewGroup existent.
1 M. Apetrii
Adaptarea conținutului la dimensiunile ecranului (ex.: versiunea de tabletă a unei
activități are un aspect mult diferit față de versiunea pentru telefon, diferit față de de
versiunea pentru TV).
Adaptarea conținutului la orientarea ecranului (ex.: versiunea portret a unei activități are
un aspect mult diferit față de versiunea peisaj). Fragmentele permit ambelor orientări să
reutilizeze elementele partajate.
Un fragment, la fel cu o activitate, are un fișier XML (de aspect) și o clasă Java care trebuie să
moștenească clasa Fragment.
Pentru a putea încorpora un fragment, activitatea trebuie să moștenească clasa FragmentActivity
sau AppCompatActivity, care adaugă suport pentru managerul de fragmente.
Exemplu:
ex_fragment.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
</LinearLayout>
FragmentulMeu.java
public class FragmentulMeu extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent,
Bundle savedInstanceState) {
// Definim fisierul xml al fragmentului
return inflater.inflate(R.layout.ex_fragment, parent, false);
}
2 M. Apetrii
este reluat.
Există două moduri de a adăuga un fragment unei activități: dinamic folosind Java și static
folosind XML.
<fragment
android:name="mape3.ex_fragments.FragmentulMeu"
android:id="@+id/fragmentulMeu"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
<FrameLayout
android:id="@+id/id_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
</LinearLayout>
...
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.your_placeholder, new FragmentulMeu());
ft.commit();
...
În metoda add() primul argument este ViewGroup-ul în care trebuie plasat fragmentul
specificat prin ID, iar al doilea parametru este fragmentul de adăugat.
La final trebuie apelată metoda commit(), pentru ca modificările să aibă efect.
3 M. Apetrii
fragmente din stiva cu popBackStack(), înregistrează un ascultător pentru modificări ale
stivei, cu addOnBackStackChangedListener ().
Exemplu de înlocuire a unui fragment cu altul (cu păstrarea stării anterioare în stivă):
Prin apelarea addToBackStack(), tranzacția este salvată în stivă, astfel încât utilizatorul
poate să aducă înapoi fragmentul anterior prin apăsarea butonului Back.
Pentru a prelua fragmente din stiva, trebuie să suprascriem metoda onBackPressed () în
activitatea principală:
@Override
public void onBackPressed() {
if (getFragmentManager().getBackStackEntryCount() > 0) {
getFragmentManager().popBackStack();
} else {
super.onBackPressed();
}
}
4 M. Apetrii
(sursa: android.com)
onCreate()
Sistemul invocă această metodă la crearea fragmentului. De obicei aici se inițializează
componentele esențiale ale fragmentului.
onCreateView()
Sistemul invocă această metodă atunci când se desenează interfața cu utilizatorul a fragmentului.
Această metodă trebuie să întoarcă un element de tipul View. Se poate returna null dacă
fragmentul nu oferă o interfață de utilizare. Elementul de tip View returnat de
onCreateView() se poate obține dintr-un fisier xml definit în folderul layout.
onAttach()
Sistemul invocă această metodă la atașarea fragmentului la o activitate.
onPause()
Sistemul invocă această metodă atunci când utilizatorul da primul semn că utilizatorul părăsește
fragmentul (aceasta nu înseamnă întotdeauna că fragmentul este distrus). Se folosește de obicei
pentru a salvarea datelor în afara sesiunii utilizatorului curent (persistența datelor).
5 M. Apetrii
Comunicarea cu fragmentele
Exemplu:
6 M. Apetrii
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
DemoFragment fragmentDemo = DemoFragment.newInstance(10, "Un titlu");
ft.replace(R.id.fragmentulMeu, fragmentDemo);
ft.commit();
Exemplu:
...
}
...
}
Exemplu: (android.com)
7 M. Apetrii
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rssfeed);
// identificam fragmentul dupa id
fragment = (DetailFragment) getSupportFragmentManager()
.findFragmentById(R.id.detailFragment);
}
Metodă Descriere
8 M. Apetrii
Metodă Descriere
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.fragment_menu, menu);
}
Trebuie apoi notificat fragmentul că elementele meniului trebuie încărcate odata cu fragmentul:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
Un click pe un element din meniu poate fi captat prin proprietatea onClick sau prin intermediul
metodei onOptionsItemSelected din fragment:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// handle item selection
switch (item.getItemId()) {
case R.id.edit_item:
// do s.th.
return true;
default:
return super.onOptionsItemSelected(item);
}
}
(sursa: android.com)
9 M. Apetrii
Subclase ale clasei Fragment care pot fi moștenite:
DialogFragment
Folosită pentru crearea casetelor de dialog
ListFragment
Afișează o listă de elemente care sunt gestionate de un „adapter”, similar cu ListActivity.
Acesta oferă mai multe metode, una din cele mai des folosite fiind onListItemClick() (se
apelează atunci când se selectează un element din listă).
10 M. Apetrii