Autore Topic: Problema header listview  (Letto 649 volte)

Offline elfo83

  • Utente normale
  • ***
  • Post: 283
  • Respect: +23
    • Mostra profilo
  • Sistema operativo:
    Mac OS 10.8.2
Problema header listview
« il: 29 Maggio 2013, 04:37:32 CEST »
0
Buongiorno a tutti. Stavo utilizzando fino a poco tempo fa una listView all'interno di una ScrollView. Ho letto molte cose a riguardo e tutti sconsigliano vivamente di  utilizzare una listview dentro una scrollview, quindi ho deciso di usare solo una listview con una grande header e 3 differenti tipi di children, in modo tale da semplificare a velocizzare il thread principale della UI.
Questa è la mia header xml:
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/profile" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:background="@color/background">
         <RelativeLayout android:id="@+id/profilehead_info" android:layout_height="180dip" android:layout_width="fill_parent"  android:background="@color/black">
         
   
         <com.qriket.qriket.utils.CustomViewPager
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:id="@+id/profilehead_pager"
                        />
                               
        <TextView android:id="@+id/profileholder_name" android:layout_width="wrap_content" android:layout_height="wrap_content"  android:text="--" android:layout_centerHorizontal="true"  android:layout_marginTop="102dip" android:textSize="14sp" android:textColor="@color/white" android:textStyle="bold" android:shadowColor="@color/black" android:shadowRadius="1" android:shadowDx="1" android:shadowDy="1"/>
        <TextView android:id="@+id/profileholder_location" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="12dip" android:layout_below="@id/profileholder_name" android:text="--" android:layout_marginTop="2dip" android:layout_centerHorizontal="true" android:textColor="@color/white" android:textStyle="bold" android:shadowColor="@color/black" android:shadowRadius="1" android:shadowDx="1" android:shadowDy="1"/>          
       
       
                <ProgressBar  android:id="@+id/profilehead_progress" android:layout_width="70dip" android:layout_height="70dip"  android:layout_centerHorizontal="true" android:layout_marginTop="20dip"  android:background="@drawable/bgseethru" android:visibility="invisible"/>
         
         <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="20dip">
             <TextView android:id="@+id/profilehead_firstcircle" android:layout_width="7dip" android:layout_height="7dip" android:background="@drawable/whitecirclebg"  />
             <TextView android:id="@+id/profilehead_secondcircle" android:layout_width="7dip" android:layout_height="7dip" android:background="@drawable/greycirclebg" android:layout_toRightOf="@id/profilehead_firstcircle" android:layout_marginLeft="10dip" />
         </RelativeLayout>
   
    </RelativeLayout>

        <!-- ********** main window view ****** -->
        <LinearLayout android:id="@+id/profilehead_main" android:layout_below="@id/profilehead_info" android:layout_width="fill_parent" android:layout_height="50dip" android:orientation="horizontal" android:background="@color/white" >
           
            <LinearLayout android:id="@+id/profilehead_scan" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:paddingTop="5dip" android:paddingBottom="5dip" >
                <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" >
                   
                    <TextView android:id="@+id/profilehead_scansvalue" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="--" android:textColor="@color/dgray1" android:textSize="15sp" android:layout_centerHorizontal="true"/>
                        <TextView  android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/dgray1" android:text="SCANS" android:textSize="10sp"  android:layout_centerHorizontal="true" android:layout_below="@id/profilehead_scansvalue" android:layout_marginTop="2dip"/>
                    <TextView android:layout_width="1dip" android:layout_height="45dip" android:background="@color/mgray" android:layout_centerVertical="true" android:layout_alignParentRight="true"/>
                         
                </RelativeLayout>
            </LinearLayout>
           
             <LinearLayout android:id="@+id/profilehead_following" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:paddingTop="5dip" android:paddingBottom="5dip" >
                <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" >
                   
                    <TextView android:id="@+id/profilehead_followingvalue" android:layout_width="wrap_content" android:text="--" android:layout_height="wrap_content" android:textColor="@color/dgray1" android:textSize="15sp"  android:layout_centerHorizontal="true"/>
                        <TextView  android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/dgray1" android:text="FOLLOWING" android:textSize="10sp"  android:layout_centerHorizontal="true" android:layout_below="@id/profilehead_followingvalue" android:layout_marginTop="2dip"/>
                    <TextView android:layout_width="1dip" android:layout_height="45dip" android:background="@color/mgray" android:layout_centerVertical="true" android:layout_alignParentRight="true"/>
                         
                </RelativeLayout>
            </LinearLayout>
           
          <LinearLayout android:id="@+id/profilehead_followers" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:paddingTop="5dip" android:paddingBottom="5dip" >
                <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" >
                   
                    <TextView android:id="@+id/profilehead_followersvalue" android:layout_width="wrap_content" android:text="--" android:layout_height="wrap_content" android:textColor="@color/dgray1" android:textSize="15sp" android:layout_centerHorizontal="true"/>
                        <TextView  android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/dgray1" android:text="FOLLOWERS" android:textSize="10sp"  android:layout_centerHorizontal="true" android:layout_below="@id/profilehead_followersvalue" android:layout_marginTop="3dip"/>
                 </RelativeLayout>
            </LinearLayout>
           
           
        </LinearLayout>
       
        <LinearLayout android:id="@+id/profilehead_main1" android:layout_below="@id/profilehead_main" android:layout_width="fill_parent" android:layout_height="70dip" android:orientation="horizontal" android:paddingTop="3dip" android:paddingBottom="3dip" android:paddingLeft="10dip" android:paddingRight="10dip">
           
            <LinearLayout android:id="@+id/profilehead_earned" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1"  android:orientation="vertical" android:background="@color/white" android:layout_marginRight="2.5dip" android:paddingLeft="2dip" android:paddingRight="2dip">
                <RelativeLayout android:id="@+id/profilehead_earnbox" android:layout_width="fill_parent" android:layout_height="40dip" android:gravity="center">
                       
                        <ImageView android:id="@+id/profilehead_earnedcoin" android:layout_width="30dip" android:layout_height="30dip" android:src="@drawable/iconqriketcash" android:layout_centerVertical="true" android:scaleType="fitXY" />
                   <TextView android:id="@+id/profilehead_earnedvalue" android:layout_width="wrap_content" android:text="--" android:layout_height="30dip" android:textColor="@color/dgray1"  android:textSize="20sp"  android:layout_marginLeft="3dip" android:layout_toRightOf="@id/profilehead_earnedcoin" android:layout_centerVertical="true"/>        
                </RelativeLayout>
                <TextView android:id="@+id/profilehead_lineearned" android:layout_width="fill_parent" android:text="--" android:layout_height="1dip" android:background="@color/mgray" />
               
                <TextView android:layout_width="fill_parent" android:layout_height="fill_parent" android:textColor="@color/dgray" android:gravity="center" android:text="EARNED" android:textSize="11sp"/>
               
            </LinearLayout>
           
             <LinearLayout android:id="@+id/profilehead_donated" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1"  android:orientation="vertical" android:background="@color/white" android:layout_marginLeft="2.5dip" android:paddingLeft="2dip" android:paddingRight="2dip" >
                <RelativeLayout android:id="@+id/profilehead_donatebox" android:layout_width="fill_parent" android:layout_height="40dip" android:gravity="center">
                       
               <ImageView android:id="@+id/profilehead_donateimg" android:layout_width="30dip" android:layout_height="30dip" android:src="@drawable/world" android:layout_centerVertical="true" android:scaleType="fitXY"/>
                   <TextView android:id="@+id/profilehead_donatedvalue" android:layout_width="wrap_content" android:text="--" android:layout_height="30dip" android:textColor="@color/dgray1"  android:textSize="20sp"  android:layout_marginLeft="3dip" android:layout_toRightOf="@id/profilehead_donateimg" android:layout_centerVertical="true" />        
                </RelativeLayout>
                <TextView android:id="@+id/profilehead_linedonate" android:layout_width="fill_parent" android:layout_height="1dip" android:background="@color/mgray" android:layout_alignParentBottom="true"/>
               
                <TextView android:layout_width="fill_parent" android:layout_height="fill_parent" android:textColor="@color/dgray"  android:gravity="center" android:text="DONATE" android:textSize="11sp"/>
               
            </LinearLayout>
        </LinearLayout>
       
       
       
        <!-- ********** progress view ****** -->
        <RelativeLayout android:id="@+id/profilehead_magicprogress"  android:layout_width="fill_parent" android:layout_height="50dip" android:layout_marginLeft="10dip" android:layout_marginRight="10dip"  android:background="@color/white" android:layout_below="@id/profilehead_main1" >
           
          <TextView android:id="@+id/profilehead_magicwand" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="WANDS" android:textColor="@color/dgray1" android:textSize="10sp" android:layout_alignParentLeft="true" android:layout_marginLeft="5dip" android:layout_centerVertical="true"/>
           
                        <ImageView android:id="@+id/profilehead_wandprogress" android:layout_width="180dip" android:layout_height="20dip" android:layout_marginLeft="5dip" android:layout_toRightOf="@id/profilehead_magicwand" android:layout_centerVertical="true"  />
                   
          <ImageView android:id="@+id/profilehead_wandsimg" android:layout_width="20dip" android:layout_height="20dip" android:layout_alignParentRight="true" android:background="@drawable/wheelstar" android:layout_centerVertical="true" android:layout_marginRight="5dip"/>
           <TextView android:id="@+id/profilehead_wandvalue" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/dgray" android:textSize="15sp" android:textStyle="bold" android:layout_toLeftOf="@id/profilehead_wandsimg" android:layout_marginRight="5dip" android:layout_centerVertical="true" />
           
        </RelativeLayout>
       
        <RelativeLayout  android:layout_width="fill_parent" android:layout_height="25dip" android:background="@color/watergreen" android:layout_marginTop="5dip" android:layout_below="@id/profilehead_magicprogress">
            <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/white" android:layout_alignParentLeft="true" android:layout_marginLeft="10dip" android:text="RECENT ACTIVITY" android:textSize="11sp" android:layout_centerVertical="true" />
        </RelativeLayout>


           
</RelativeLayout>

nella classe faccio l'inflate della mia header in questo modo e di mano in mano assegno ai vari elementi XML il loro valore:
Codice (Java): [Seleziona]
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                header = (ViewGroup)inflater.inflate(R.layout.headerprofilelist,null,false);

questo è il modo in cui assegno un valore ai miei widget dell'header, utilizzando la variabile header:
Codice (Java): [Seleziona]
                nameHolder=(TextView)header.findViewById(R.id.profileholder_name);
e così via...
il problema è che quando vado ad aggiungere l'header alla mia lista prima del metodo setAdapter...

Codice (Java): [Seleziona]
list.addHeader(header)
ListProfileAdp adapter = new ListProfileAdp(this,R.layout.profilecellactivities,a_list);
                        list.setAdapter(adapter);

 l'errore  di runtime che mi esce fuori è sempre:
"Cannot add header view to listsetAdapter has already been called".

Ho capito che devo aggiungere l'header prima di chiamare setAdapter sulla lista, ma anche cambiando la sua posizione e mettendolo molto prima di setAdapter, l'errore è lo stesso. Inoltre ho provato ad aggiungere ulteriori parametri al metodo addHeader e all'inflater ma l'errore è sempre lo stesso. Qualche idea? Grazie a tutti.

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Problema header listview
« Risposta #1 il: 29 Maggio 2013, 08:50:10 CEST »
0
non ricordo come, ma avevo risolto anche io il problema usando la footer view invece che l'header view...
[facile] Endless List, Una lista senza fine - Android Developers Italia
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +152
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:Problema header listview
« Risposta #2 il: 29 Maggio 2013, 10:08:31 CEST »
0
Buongiorno a tutti. Stavo utilizzando fino a poco tempo fa una listView all'interno di una ScrollView. Ho letto molte cose a riguardo e tutti sconsigliano vivamente di  utilizzare una listview dentro una scrollview, quindi ho deciso di usare solo una listview con una grande header e 3 differenti tipi di children, in modo tale da semplificare a velocizzare il thread principale della UI.

Non risolve il problema in questione.
La listView è bene non metterla in una ScrollView (perchè sono due elementi scrollabili uno dentro l'altro).
Però puoi tranquillamente costruirti un LinearLayout con un Adapter, che fa in pratica la stessa cosa.
ListView altezza dinamica - Android Developers Italia

Offline elfo83

  • Utente normale
  • ***
  • Post: 283
  • Respect: +23
    • Mostra profilo
  • Sistema operativo:
    Mac OS 10.8.2
Re:Problema header listview
« Risposta #3 il: 29 Maggio 2013, 16:58:17 CEST »
0
Grazie mille per le risposte ma il problema è che il layout dovrebbe essere una listview che deve essere aggiornata con il pulltorefresh dell'attività. Se inserisco un linear layout dinamico all'interno di una scroll view dopo sarebbe un po' un casino, almeno credo. Invece se avessi direttamente una listview sarebbe + semplice perchè ho già quasi tutto il codise pronto per una listview pulltorefresh.

Post unito: 29 Maggio 2013, 18:55:21 CEST
Perchè non aggiungere dinamicamente child al mio scrollview?
« Ultima modifica: 29 Maggio 2013, 18:55:21 CEST da elfo83, Reason: Merged DoublePost »

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Problema header listview
« Risposta #4 il: 29 Maggio 2013, 23:00:05 CEST »
0
non ho capito nulla di quello che hai scritto, ma per la pulltorefresh view:
Pull To Refresh List View, Aggiornamento in stile Twitter! - Android Developers Italia
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline elfo83

  • Utente normale
  • ***
  • Post: 283
  • Respect: +23
    • Mostra profilo
  • Sistema operativo:
    Mac OS 10.8.2
Re:Problema header listview
« Risposta #5 il: 30 Maggio 2013, 16:20:22 CEST »
0
Dicevo che invece di usare direttamente una ListView con L'header (ho anche provato ma mi da problemi e non funziona correttamente), ho utilizzato una scrollView. Dato che la ScrollView ha un solo figlio, aggiungo dinamicamente a questo delle view con un adapter ed il gioco è fatto. Mi manca solo di rendere questa scrollView pullToRefresh. Sicuramente avrò dei problemi..

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Problema header listview
« Risposta #6 il: 30 Maggio 2013, 17:29:38 CEST »
0
per me stai inventando l'acqua calda... perchè non usi le implementazioni di pulltorefresh che ci sono già? se devi mostrare tanti dati la listview è la scelta corretta
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline elfo83

  • Utente normale
  • ***
  • Post: 283
  • Respect: +23
    • Mostra profilo
  • Sistema operativo:
    Mac OS 10.8.2
Re:Problema header listview
« Risposta #7 il: 30 Maggio 2013, 20:36:49 CEST »
0
Mi è difficile utilizzare solo una listView perché ho la necessità che tutto il layout dell'activity scrolli, quindi per utilizzare un'unica listview senza scrollview dovrei aggiungere alla mia listView un'header carica di contenuti e poi aggiungere i children. Ho provato a farlo ma nel momento in cui vado a riempire l'header, con dati che mi arrivano in momenti diversi, e assegnarla alla mia listview mi dà errore oppure non mi da errore ma il layout è completamente sballato. Pensavo quindi di utilizzare solo una scrollview e fare il pull to refresh di quest'ultima. La quantità di dati che devo visualizzare non è molta, saranno una 15ina di righe al massimo.