Penso di aver trovato indicazioni di progettazione contraddittorie all'interno della documentazione sulla frammentazione di Google Android .
La prima affermazione di seguito suggerisce che ciascun frammento non è a conoscenza di altri frammenti e comunica sempre solo l'attività e lascia che l'attività decida cosa deve essere fatto.
Creating event callbacks to the activity
In some cases, you might need a fragment to share events with the activity. A good way to do that is to define a callback interface inside the fragment and require that the host activity implement it. When the activity receives a callback through the interface, it can share the information with other fragments in the layout as necessary.
For example, if a news application has two fragments in an activity—one to show a list of articles (fragment A) and another to display an article (fragment B)—then fragment A must tell the activity when a list item is selected so that it can tell fragment B to display the article. In this case, the OnArticleSelectedListener interface is declared inside fragment A:
Ma una seconda affermazione più avanti nella stessa pagina, un frammento di lista istanzia direttamente un frammento di dettaglio.
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();
if (index == 0) {
ft.replace(R.id.details, details);
} else {
ft.replace(R.id.a_item, details);
}
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();
Quindi le mie domande:
Questi sono in contraddizione tra loro?
Questo dovrebbe essere lasciato ad Activity?
Mi sento confuso, quindi ogni chiarimento è apprezzato.