Qual è esattamente la funzione di LayoutInflater?
Quando si progetta utilizzando XML, tutti gli elementi dell'interfaccia utente sono solo tag e parametri.Prima di poter utilizzare questi elementi dell'interfaccia utente, ad esempio TextView o LinearLayout, è necessario creare gli oggetti effettivi corrispondenti a questi elementi xml. Ecco a cosa serve l'inflater. Il inflater, usa questi tag e i loro parametri corrispondenti per creare gli oggetti reali e impostare tutti i parametri. Dopo questo è possibile ottenere un riferimento all'elemento dell'interfaccia utente utilizzando findViewById().
Perché tutti gli articoli che ho letto controllano se convertview è nullo o non prima? Cosa significa quando è nullo e cosa significa quando non lo è?
Questo è interessante. Vedete, getView() viene chiamato ogni volta che viene estratto un elemento nell'elenco. Ora, prima che l'oggetto possa essere disegnato, deve essere creato. Ora convertView fondamentalmente è l'ultima vista usata per disegnare un oggetto. In getView() si gonfia prima l'xml e poi si usa findByViewID() per ottenere i vari elementi dell'interfaccia utente del listitem. Quando controlliamo (convertView == null), ciò che facciamo è controllare che se una vista è nullo (per il primo elemento), quindi crearla, altrimenti, se esiste già, riutilizzarla, non c'è bisogno di ripetere il processo di rigonfiamento . Lo rende molto più efficiente.
Devi anche avere trovato un concetto di ViewHolder in getView(). Questo rende la lista più efficiente. Quello che facciamo è creare un viewholder e memorizzare il riferimento a tutti gli elementi dell'interfaccia utente che abbiamo ottenuto dopo il gonfiaggio. In questo modo, possiamo evitare di chiamare numerosi findByViewId() e risparmiare molto tempo. Questo ViewHolder viene creato nella condizione (convertView == null) e viene memorizzato in convertView utilizzando setTag(). Nel ciclo else lo otteniamo di nuovo usando getView() e riutilizzalo.
Qual è il parametro padre che questo metodo accetta?
Il genitore è un ViewGroup a cui viene infine allegata la vista creata da getView(). Ora nel tuo caso questo sarebbe il ListView.
Spero che questo aiuti :)
Convertview == null è utile quando tutte le tue iten seguono lo stesso layout. Ad esempio, se è necessario verificare la presenza di una radio o di un pulsante con il segno di spunta e modificare il layout in base a ciascun elemento, è necessario reinfilare o visualizzare la cache. – sagits
Non è necessario reinfilare. È sufficiente scrivere switch o if-else ladder in getview e gonfiare le visualizzazioni in base al caso, sovrascrivere public int getItemViewType (int position) e public int getViewTypeCount(). @sagits –
Se le istruzioni di solito funzionano, ma quando si utilizzano i pulsanti di opzione, i testi di modifica e questi tipi di elementi che ho avuto problemi con l'utilizzo di visualizzazioni memorizzate nella cache, ci sono alcune domande relative a questo materiale nello stack overflow. – sagits