Come nidificare ListViews?

Ecco il problema. Sto scrivendo un'applicazione che interroga un servizio web per alcuni dati. I dati restituiti sono un numero arbitrario di stringhe.

Ho bisogno di visualizzare un elenco di queste stringhe, che ovviamente è più facile facendo nidificare un ListView in un altro ListView. Questo rende un ListView le cui righe contengono altri ListViews. Il problema che ho eseguito è che, quando faccio questo, i ListViews interni mostrano solo il primo elemento nell'arrays di backup.

  • AsyncTask: doInBackground non chiamato
  • Android ICS: errore JNI tentativo di utilizzare il riferimento locale stale 0x1
  • memory condivisa in android ndk
  • Moltiplicazione appropriata di matrici per la rotazione / traduzione
  • android: come accettare il certificato CA
  • Come revocare tutte le autorizzazioni di Facebook utilizzando Android SDK?
  • Sto utilizzando un ListAdapter personalizzato che estende BaseAdapter. Utilizzando il debugger Eclipse sono stato in grado di determinare che il metodo getView (int, View, viewGroup) per each istanza (uno per each row nel ListView nidificato) viene sempre chiamato tre volte, ma sempre con lo stesso int-argument (cioè 0). Il numero di volte in cui getView () per un ListAdapter viene chiamato sembra avere poco a che vedere con il numero di elementi che contiene l'arrays di backup.

    Ho creato un'applicazione di prova abbastanza semplice che illustra quello che sto realmente facendo.

    Questo è il mio ListAdapter. Un altro ListAdapter, l'InnerListAdapter nidificato viene utilizzato per popolare gli elenchi interni.

    package org.my.tests; import java.util.List; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ListView; import android.widget.TextView; public class NestedListAdapter extends BaseAdapter { Context context; List<List<String>> list; public NestedListAdapter(Context context, List<List<String>> list) { this.context = context; this.list = list; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ListView view = new ListView(context); view.setAdapter(new InnerListAdapter(list.get(position))); return view; } public class InnerListAdapter extends BaseAdapter { List<String> list; public InnerListAdapter(List<String> list) { this.list = list; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { TextView view = new TextView(context); view.setText(String.valueOf(position) + ' ' + list.get(position)); return view; } } } 

    Questo è il codice della mia class Attività:

     package org.my.tests; import java.util.ArrayList; import java.util.List; import android.app.ListActivity; import android.os.Bundle; public class ListViewTest extends ListActivity { private static final List<List<String>> lists = new ArrayList<List<String>>(3); static { List<String> list = new ArrayList<String>(2); list.add("a"); list.add("b"); lists.add(list); list = new ArrayList<String>(2); list.add("c"); list.add("d"); lists.add(list); list = new ArrayList<String>(2); list.add("e"); list.add("f"); lists.add(list); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.list_view_test); setListAdapter(new NestedListAdapter(this, lists)); } } 

    L'Adaptore personalizzato utilizzato nell'applicazione effettiva è molto più complesso e utilizza l'inflazione di layout per i ListViews nidificati. Il risultato è lo stesso però.

    Qualcuno ha delle idee su come risolvere questo problema per mostrare i due elementi in ciascuna delle liste interne?

  • Cambiare Locale all'interno dell'applicazione stessa
  • Spegni lo schermo in Android
  • chiamando il servizio di magento web da android client utilizzando kSoap2
  • android: capitalizza non funziona
  • Android ProgressDialog con problema di threading
  • Butterknife Visualizza iniezione
  • One Solution collect form web for “Come nidificare ListViews?”

    perché non si utilizza un ExpandableListActivity con il loro ExpandableListView e ExpandableListAdapter, se li usi, hai già i methods: getChild, getGroup e puoi build differents Visualizza per genitori e bambini …

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.