Documente Academic
Documente Profesional
Documente Cultură
Fragments
Informații despre modul de utilizare al elementelor de tip Fragments se pot obține de la adresa:
http://developer.android.com/guide/components/fragments.html
Pentru exemplificare, urmați pașii prezentați mai jos (are la bază exemplul prezentat la adresa de mai
sus):
Pas 1
Pas 2
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragment);
}
}
Pas 3
Pas 4
In același folder cu FragmentActivity.java vom crea fișierul Resurse.java în care vom defini tablourile ce
vor conține titlurile și valorile de afișat.
1 M. Apetrii
public final class Resurse {
/**
* tabloul static cu lista titlurilor.
*/
public static final String[] TITLURI =
{
"TITLU I",
"TITLU II",
"TITLU III",
"TITLU IV",
"TITLU V"
};
/**
* tabloul static cu textele asociate titlurilor
*/
public static final String[] DETALII =
{
"Text asociat lui TITLU I.",
"Text asociat lui TITLU II.",
"Text asociat lui TITLU III.",
"Text asociat lui TITLU IV.",
"Text asociat lui TITLU V."
};
}
Pas 6
}
}
Pas 7
În folderul “layout” vom da fișierului activity_fragment.xml conținutul următor (pentru modul Portret)
2 M. Apetrii
Pas 8
În folderul “layout-land” vom da fișierului activity_fragment.xml conținutul următor (pentru modul Landscape)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment class="mape3.ex_fragments.FragmentActivity$FragmentTitluri"
android:id="@+id/titluri" android:layout_weight="1"
android:layout_width="0px" android:layout_height="match_parent" />
Pas 9
Testam proiectul până în acest moment. În timpul testului, emulatorul poate comuta între modurile
Portret/Landscape prin combinația de taste Ctrl+F11.
Pas 10
Pas 11
if (savedInstanceState != null) {
// determinam elenmentul selectat.
elementSelectat = savedInstanceState.getInt("curChoice", 0);
}
if (tipLandscape) {
// afisam detalii despre elementul selectat
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
afiseazaDetalii(elementSelectat);
}
Pas 12
3 M. Apetrii
/**
* functia care afiseaza detalii despre elementul selectat
*/
void afiseazaDetalii(int index) {
elementSelectat = index;
if (tipLandscape) {
// evidentiem elementul selectat
getListView().setItemChecked(index, true);
// ....
} else {
// ....
}
}
Pas 13
Pas 14
Vom declara în clasa FragmentActivity fragment-ul din dreapta care va contine detalii despre elementul selectat.
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (container == null) {
return null;
}
//cream elementele pentru vizualizare
ScrollView scroller = new ScrollView(getActivity());
TextView text = new TextView(getActivity());
int padding =
(int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
4, getActivity().getResources().getDisplayMetrics());
text.setPadding(padding, padding, padding, padding);
scroller.addView(text);
text.setText(Resurse.DETALII[daIndexSelectat()]);
return scroller;
}
}
4 M. Apetrii
Pas 15
Pas 16
Pas 17
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("curChoice", elementSelectat);
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
afiseazaDetalii(position);
}
Pas 18
Pas 19
Pentru vizualizarea detaliilor și în modul Portret vom crea în FragmentActivity un nou Activity
5 M. Apetrii
/**
* Este al doilea "Activity" care se va afisa cand ecranul nu este suficient
de lat (modul Portret).
*/
public static class DetaliiTitluActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getResources().getConfiguration().orientation==
Configuration.ORIENTATION_LANDSCAPE) {
// nu este necesar in modul Landscape.
finish();
return;
}
if (savedInstanceState == null) {
// facem legatura cu fragmentul FragmentDetalii.
FragmentDetalii detalii = new FragmentDetalii();
detalii.setArguments(getIntent().getExtras());
getFragmentManager().beginTransaction().add(android.R.id.content,
detalii).commit();
}
}
}
Pas 20
Pas 21
Pas 22
6 M. Apetrii