Autore Topic: Scroll di più ListView in un solo layout di pagina  (Letto 1356 volte)

Offline MrKrabs

  • Utente junior
  • **
  • Post: 94
  • Respect: +4
    • Mostra profilo
Scroll di più ListView in un solo layout di pagina
« il: 12 Gennaio 2011, 16:16:50 CET »
0
Ciao a tutti

ho 3 list view una sotto l'altra, con relative intestazioni, in una sola pagina.
ora vorrei disabilitare lo scroll su ogni singola lista, perchè vorrei che le liste presentassero tutti i loro item e scrollando l'intera pagina riuscire a visualizzarli tutti.

ho pensato a android:isScrollContainer ma non saprei...idee?

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +202
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:Scroll di più ListView in un solo layout di pagina
« Risposta #1 il: 12 Gennaio 2011, 17:13:36 CET »
0
Penso che devi implementarti una listview con "header interni"

quello che chiedi sarebbe mettere 3 listview in una scrollview, cosa che non si puo fare. in quanto scrollview e listview competono per lo scroll.

Offline MrKrabs

  • Utente junior
  • **
  • Post: 94
  • Respect: +4
    • Mostra profilo
Re:Scroll di più ListView in un solo layout di pagina
« Risposta #2 il: 12 Gennaio 2011, 19:11:32 CET »
0
Non finirò mai di ringraziare il genio che ha scritto questo trick
Codice (Java): [Seleziona]
public class Utility {
    public static void setListViewHeightBasedOnChildren(ListView listView) {
        ListAdapter listAdapter = listView.getAdapter();
        if (listAdapter == null) {
            // pre-condition
            return;
        }

        int totalHeight = 0;
        for (int i = 0; i < listAdapter.getCount(); i++) {
            View listItem = listAdapter.getView(i, null, listView);
            listItem.measure(0, 0);
            totalHeight += listItem.getMeasuredHeight();
        }

        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
        listView.setLayoutParams(params);
    }
}

richiamare con
Codice (Java): [Seleziona]
Utility.setListViewHeightBasedOnChildren(myListView);
ed il gioco è fatto.
è possibile cioè inserire delle ListView in una ScrollView!!

ps: grazie Qlimax che mi hai dato lo spunto di cosa andare a cercare

« Ultima modifica: 12 Gennaio 2011, 19:13:11 CET da davidelib »

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +202
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:Scroll di più ListView in un solo layout di pagina
« Risposta #3 il: 12 Gennaio 2011, 20:48:51 CET »
0
Ok, è un accrocchio. Praticamente ad ogni listview dai un altezza corrispondente alla somma delle altezze delle views interne, in questo modo non scrollano e le puoi inserire in una scrollview.

Se funziona...

Ad ogni modo viene fortemente sconsigliato
http://groups.google.com/group/android-beginners/browse_thread/thread/2d1a4b8063b2d8f7?pli=1
android - How can I put a ListView into a ScrollView without it collapsing? - Stack Overflow
http://groups.google.com/group/android-developers/browse_thread/thread/3308f49057b1477b

Offline wino_7

  • Nuovo arrivato
  • *
  • Post: 35
  • Respect: 0
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy s
  • Play Store ID:
    Francesco Di Iorio
  • Sistema operativo:
    Windows 7, Debian
Re:Scroll di più ListView in un solo layout di pagina
« Risposta #4 il: 24 Ottobre 2011, 21:06:55 CEST »
0
Attenzione ho testato il funzionamento di questo workaround e mi sono accorto che c'è un bug dunque mi sono messo alla ricerca della soluzione.
Fortunatamente è stato fixato (da DougW ma io ci sono arrivato grazie a Ore Ni Makasero ).
Il link alla soluzione è questo Ore Ni Makasero: Android: put ListView in a ScrollView

Offline beppenmk

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    samsung galaxy s
  • Sistema operativo:
    ubuntu (passerò a suse)
Re:Scroll di più ListView in un solo layout di pagina
« Risposta #5 il: 26 Gennaio 2012, 11:49:05 CET »
0
sarà ma io non riesco a farlo funzionare.......

Ho 2 ListView con 2 tipologie diverse di dati ( che quindi no n posso unire )  e non riesco in nessun odo ad ottenere 1 scroll unico ma contiuo ad ottenerne 2 diversi ..... sigh

posto il codice magari qualcuno può aiutarmi  (anche solo trovando soluzioni alternative )  :-)


Codice (Java): [Seleziona]
        private void popola (){

                ListView listViewCategorie = (ListView) findViewById(R.id.categorieList);
                ListView listViewProdotti = (ListView) findViewById(R.id.prodottiList);
               
               
               
                listViewCategorie.setAdapter(popolaCategorie());
                Utility.setListViewHeightBasedOnChildren(listViewCategorie);
               
               
                listViewProdotti.setAdapter(popolaProdotti());
                Utility.setListViewHeightBasedOnChildren(listViewProdotti);
        }



private ArrayAdapter<CategoriaVO> popolaCategorie() {          
                categorieChild = ((MovyloshopApplication)getApplication()).getCategories();
                /*
                 * qui costruisco l'intent view
                 */

                // Otteniamo il riferimento alla ListView
               
                //ListView listView = (ListView) findViewById(R.id.categoriaList);
                ArrayAdapter<CategoriaVO> arrayAdapter = new ArrayAdapter<CategoriaVO>(
                                this, R.layout.category_item, R.id.nomeCategoria, categorieChild) {
                        @Override
                        public View getView(int position, View convertView, ViewGroup parent){ 
                                return getViewHolder(position,convertView,parent);
                        }
                        public View getViewHolder(int position, View convertView, ViewGroup parent) {
                                CategorieHolder categoryHolder = null;
                                if (convertView == null) {
                                        LayoutInflater inflater =(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                                        convertView = inflater.inflate(R.layout.category_item, null);
                                        //creo un oggetto con il riferimento alla classe x i titoli(holder)
                                        categoryHolder = new CategorieHolder();
                                        categoryHolder.name = ((TextView)convertView.findViewById(R.id.nomeCategoria));
                                        categoryHolder.infoCategoria = ((TextView)convertView.findViewById(R.id.infoCategoria));
                                        categoryHolder.imageThumb =(ImageViewExtended)convertView.findViewById(R.id.categoriaImmagineThumb);
                                        convertView.setTag(categoryHolder);
                                }else{
                                        categoryHolder=(CategorieHolder)convertView.getTag();
                                }
                                CategoriaVO c = getItem(position);
                                categoryHolder.name.setText(c.id+" "+c.name);
                                categoryHolder.infoCategoria.setText( "(c:"+  c.num_of_subcat+"|p:"+c.num_of_prod+ ")" );
                                categoryHolder.imageThumb.setImageHref(c.image);
                                //convertView.setTag(c.id);
                                return convertView;
                        }
                };
                        // Lo impostiamo come adapter della listView
                //listView.setAdapter(arrayAdapter);
                return arrayAdapter;
               
        }              

//prodottiVO molto smile, cambia l'xml layout ovviamente
Codice (XML): [Seleziona]
  <TextView
       android:id="@+id/nomeCategoriaPrincipale"
       style="@style/titoloNero"
       android:text="nome categoria" />

    <ListView
       android:id="@+id/categorieList"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"
       android:background="@color/green" >
    </ListView>

    <ListView
       android:id="@+id/prodottiList"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent" >
    </ListView>

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Scroll di più ListView in un solo layout di pagina
« Risposta #6 il: 26 Gennaio 2012, 12:03:01 CET »
0
Cosa intendi per scroll unico?

Offline beppenmk

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    samsung galaxy s
  • Sistema operativo:
    ubuntu (passerò a suse)
Re:Scroll di più ListView in un solo layout di pagina
« Risposta #7 il: 29 Gennaio 2012, 09:47:12 CET »
0
intendo uno scroll delle dimensioni dellìintera pagina
l'esempio postato crea un scroll, un separatore che resta fisso ed un altro scroll.

Ho comunque risolto scoprendo questa classe

https://github.com/commonsguy/cwac-sacklist

che magari torna utile a chi ha il mio stesso problema:-D