Sto cercando di imparare Frammenti in Android e da vari esempi ho trovato che ci sono diversi modi per farlo e volevo solo avere qualche consiglio su quale sia il modo corretto, o almeno in quali circostanze, a senso unico dovrebbe essere usato su un altroFrammenti Android devo riutilizzare 1 frammento o creare nuove istanze?
Un esempio ha creato un layout che conteneva un frammento e un FrameLayout. Nel codice, quando un elemento viene selezionato da ListFragment viene creato un nuovo frammento (con alcuni dati richiesti nel costruttore) e FrameLayout viene sostituito con questo nuovo frammento (utilizzando FragmentTransaction.replace()).
Un altro esempio ha un file di layout che dichiara i 2 frammenti affiancati. Ora nel codice quando l'utente seleziona un elemento dall'elenco in un frammento viene effettuata una chiamata all'altro frammento per aggiornare i dati (in base all'elemento selezionato).
Quindi mi chiedo se uno di questi metodi è preferito rispetto all'altro o se ci sono determinate circostanze in cui uno dovrebbe essere utilizzato?
EDIT: ecco il codice per ciascuno dei due metodi mi riferivo a:
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);
}
}