Video: Android Jetpack: Introducing Navigation Component 2024
L'interfaccia utente nell'esempio di app Android qui utilizzato ha tre pannelli: un elenco di elementi, un pannello di dettagli che descrive l'elemento selezionato nell'elenco e un pannello dettagli in profondità. Su un piccolo schermo dello smartphone, ogni pannello potrebbe essere un'attività separata. Ma uno schermo tablet in modalità orizzontale ha spazio per più di un pannello.
L'immagine sotto mostra questa app con due dei tre pannelli. Il riquadro a sinistra mostra un elenco di componenti di Android SDK. Il pannello a destra mostra una descrizione di qualsiasi componente scelto nell'elenco sulla sinistra. (La descrizione è in realtà le prime frasi della documentazione dell'SDK del componente.) Questo modello dettagliato sul lato destro fa parte di molte interfacce utente.
Per creare il display, si crea un'attività. L'attività ha due frammenti: un frammento a sinistra e un altro a destra. Il pannello di sinistra mostra lo stesso frammento durante l'esecuzione dell'app, quindi puoi dichiararlo nel file di layout dell'attività. Il pannello di destra visualizza un frammento alla volta, ma il frammento cambia durante l'esecuzione dell'app. Quindi dichiari un layout del frame nel pannello di destra.
Nel codice sopra, l'androide: layout_ qualunque sia l'attributo divida lo schermo in due metà: una metà per l'elemento frammento e l'altra metà per l'elemento FrameLayout. La strategia con questi attributi è di iniziare assegnando un minimo di zero pixel per ciascun elemento. Ovviamente, zero pixel significa nessuna larghezza (che è la stessa cosa di essere invisibile). Per mantenere invisibili le due metà del layout, assegna valori pari a zero layout_weight uguali alle due metà. Con valori di peso diversi da zero, ciascuna metà si espande per riempire lo spazio disponibile nel layout.
L'uso del nome di classe completo del frammento (con allmycode, frag. ComponentNamesFragment) è intenzionale. Un nome abbreviato (come ComponentNamesFragment) non taglierà la senape.
Nel caso ve lo stiate chiedendo, i dettagli integrati di AndroidElementBackground offrono un aspetto uniforme per cose come la metà destra (cose che mostrano dettagli su un oggetto che l'utente ha selezionato).
Il codice di attività principale dell'app è impressionantemente poco interessante.
pacchetto com. allmycode. Frag; importa Android. app. Attività; importa Android. os. Bundle; public class AllPurposeActivity estende Activity {@Override protected void onCreate (Bundle savedInstanceState) {super. onCreate (savedInstanceState); setContentView (R.disposizione. main);}}
Il codice seguente contiene la classe ComponentNamesFragment. In virtù del layout nel primo esempio, Android pianta un ComponentNamesFragment sul lato sinistro dello schermo del dispositivo.
pacchetto com. allmycode. Frag; importa Android. app. FragmentManager; importa Android. app. FragmentTransaction; importa Android. app. ListFragment; importa Android. os. Bundle; importa Android. vista. Vista; importa Android. widget di. ArrayAdapter; importa Android. widget di. Visualizzazione elenco; public class ComponentNamesFragment estende ListFragment {final static String [] COMPONENTS = {"Activity", "Service", "BroadcastReceiver", "ContentProvider"}; @Override public void onActivityCreated (Bundle savedInstanceState) {super. onActivityCreated (savedInstanceState); setListAdapter (nuovo ArrayAdapter (getActivity (), Android. layout R. simple_list_item_1, COMPONENTS));} @Override public void onListItemClick (ListView l, Visualizza v, int index, long id) {// Crea frammento con indice DocsFragment docsFragment = nuovo DocsFragment (); Bundle args = Helper. getBundleWithIndex (indice); docsFragment. setArguments (args); // Cancella lo stack posteriore FragmentManager fragmentManager = getFragmentManager (); int backStackEntryCount = fragmentManager. getBackStackEntryCount (); for (int i = 0; iLa classe nel codice sopra estende la classe ListFragment di Android. Un ListFragment è un frammento che visualizza un elenco. All'inizio del ciclo di vita del frammento, il codice nell'esempio precedente imposta un list adapter (più specificamente un ArrayAdapter) per il frammento. Quindi quanto presto è "presto"?
Il primo parametro del costruttore ArrayAdapter è un contesto. Ma aspetta! A differenza di un'attività, un frammento non è un contesto. Quindi non è possibile utilizzare la parola chiave this per il primo parametro del costruttore ArrayAdapter.
Fortunatamente, un frammento ha un metodo getActivity. Una chiamata a getActivity acquisisce l'attività a cui è collegato il frammento. Quindi, per il primo parametro del costruttore ArrayAdapter, puoi chiamare getActivity. Ovviamente, non è possibile chiamare getActivity finché il frammento non è associato a un'attività esistente. Ecco perché il metodo onActivityCreated del frammento viene sovrascritto sopra. Le chiamate Android onActivityCreated dopo il collegamento del frammento e la chiamata del metodo onCreate dell'attività. Quindi tutto funziona come previsto.
L'androide. app. La classe dei bisnonni delle classi di attività è Android. soddisfare. Contesto. Ma l'androide. app. La classe genitore della classe Framment è semplicemente vecchia java. Lang. Oggetto. Pertanto, nel codice di un'attività, la parola chiave si riferisce a un contesto. Ma nel codice di un frammento, la parola chiave non si riferisce a un contesto.
Nell'esempio sopra, il costruttore per ArrayAdapter ha tre parametri.
Il primo parametro è il contesto - quel parametro spiacevole che ti costringe a mettere il costruttore nel metodo onActivityCreated.
Il secondo parametro è simple_list_item_1 - un layout Android standard.
Il layout simple_list_item_ 1 crea l'aspetto che vedi sul lato sinistro dell'immagine. Android ha molti di questi layout standard. Per una carrellata dei layout disponibili, visita il sito per gli sviluppatori di Android.
Il terzo parametro è la raccolta di elementi che verranno visualizzati nell'elenco.
In questo esempio, tali elementi provengono dall'array COMPONENTS, dichiarato nello stesso esempio.
Come un ListActivity, un ListFragment ha un metodo onListItemClick. Puoi rispondere a un clic lavorando con DocsFragment, FragmentTransaction e FragmentManager:
DocsFragment rappresenta il lato destro dell'immagine sopra.
Una transazione di frammenti è un insieme di cose che fai con i frammenti. Ad esempio, l'impostazione per sostituire un frammento con un altro è una transazione.
Un gestore di frammenti fa ciò che suggerisce il nome. Gestisce gli arrivi e le partenze dei frammenti.