Próbuję się nauczyć Fragmentów w Androidzie i na podstawie różnych przykładów, które znalazłem, wydaje się, że są różne sposoby robienia tego i chciałem po prostu uzyskać poradę, która z nich jest poprawna, lub przynajmniej w jakich okolicznościach w jedną stronę powinien być użyty nad innym.Fragmenty Androida powinny ponownie użyć 1 fragment lub utworzyć nowe wystąpienia?
Jeden z przykładów utworzył układ zawierający fragment i FrameLayout. W kodzie, gdy element jest wybierany z ListFragmentu, tworzony jest nowy Fragment (z pewnymi danymi wymaganymi w konstruktorze) i FrameLayout jest zastępowany nowym Fragmentem (za pomocą FragmentTransaction.replace()).
Inny przykład ma plik układu, który deklaruje 2 fragmenty obok siebie. Teraz w kodzie, gdy użytkownik wybierze element z listy w jednym fragmencie, wywoływane jest połączenie z drugim fragmentem, aby zaktualizować dane (w oparciu o wybrany element).
Po prostu zastanawiam się, czy któraś z tych metod jest preferowana w stosunku do drugiej, czy też istnieją pewne okoliczności, w których należy z nich skorzystać?
EDIT: Oto kod dla każdego z dwóch metod miałem na myśli:
1:
mCurCheckPosition = index;
if (mDualPane) {
// We can display everything in-place with fragments, so update
// the list to highlight the selected item and show the data.
getListView().setItemChecked(index, true);
// Check what fragment is currently shown, replace if needed.
DetailsFragment details = (DetailsFragment)
getFragmentManager().findFragmentById(R.id.details);
if (details == null || details.getShownIndex() != index) {
// Make new fragment to show this selection.
details = DetailsFragment.newInstance(index);
// Execute a transaction, replacing any existing fragment
// with this one inside the frame.
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.details, details);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();
}
} else {
// Otherwise we need to launch a new activity to display
// the dialog fragment with selected text.
Intent intent = new Intent();
intent.setClass(getActivity(), DetailsActivity.class);
intent.putExtra("index", index);
startActivity(intent);
}
2:
public void onListItemClick(ListView l, View v, int position, long id) {
String item = (String) getListAdapter().getItem(position);
DetailFragment fragment = (DetailFragment) getFragmentManager()
.findFragmentById(R.id.detailFragment);
if (fragment != null && fragment.isInLayout()) {
fragment.setText(item);
} else {
Intent intent = new Intent(getActivity().getApplicationContext(),
DetailActivity.class);
intent.putExtra("value", item);
startActivity(intent);
}
}