Aggiungi dinamicamente il contenuto dell'interfaccia utente in Android
-
28-10-2019 - |
Domanda
Ho un'app Android che pone una domanda seguita da x
Numero di opzioni. Ogni opzione contiene un file textview
, ImageView
e a radio button
.
Il valore di x
(cioè il numero di opzioni) non è costante. Voglio aggiungere dinamicamente il contenuto dell'interfaccia utente per soddisfare questo requisito.
Al momento ho scritto il codice nell'XML del layout per visualizzare un massimo di 4 opzioni. Se il numero di opzioni è 2, nascondo le opzioni 3 e 4 usando qualcosa di simile
tvoption1.setVisibility(View.GONE);
tvoption2.setVisibility(View.GONE);
Tuttavia questo non è molto scalabile. Qualcuno può dirmi come aggiungere opzioni per Java dinamicamente. O esiste un approccio migliore?
Soluzione
UN View
può essere aggiunto in fase di esecuzione usando il gonfiatore in questo modo:
LinearLayout linearLayout = (LinearLayout)inflater.inflate(R.layout.news_categories_item, null);
TextView categoryValueTextView = (TextView)linearLayout.findViewById(R.id.news_category_item_value);
mMainLinearLayout.addView(categoryValueTextView);
In questo esempio, è gonfiato un LinearLayout contenente un TextView. Viene quindi ottenuto un riferimento al componente TextView e il TextView viene aggiunto dinamicamente (in fase di esecuzione) al layout lineare principale (mMainLinearLayout
).
L'oggetto inflater può essere ottenuto in un'attività utilizzando getLayoutInflater()
.
Altri suggerimenti
Crea il layout della riga separatamente, dal XML principale
Ottieni il servizio LayoutInflater dal contesto:
LayoutInflater inflater=(LayoutInflater)getSystemService(LAYOUT_INFLATE_SERVICE);
Utilizza il seguente metodo per addView a Main XML, suppongo che tu abbia il layout genitore llparent in XML e desideri aggiungere elementi in questo llpaent, dall'elenco elenco.
for(int i=0;i<list.size();i++)
{
LinearLayout llView=(LinearLayout)inflater.inflate(R.layout.row);
//get view id and set values
TextView txt=(TextView)llView.findViewById(R.id.text);
}
UN ListView
è una buona vista per la visualizzazione di diversi elementi simili. Qui è un tutorial (anche altre viste con gli adattatori sono buone, come GridView
o Gallery
).
Probabilmente vorrai crearne uno tuo adapter
Per l'elenco, in modo da poter visualizzare tutte e tre le viste (casella di controllo, immagine e testo) come un elemento, ma ci sono molti esempi su quello disponibile in rete e qui su così.