Autore Topic: ExpandableList ... problema visualizzazione layout  (Letto 890 volte)

Offline mary2501

  • Utente junior
  • **
  • Post: 70
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    htc desire hd
  • Sistema operativo:
    mac , windows xp
ExpandableList ... problema visualizzazione layout
« il: 06 Agosto 2012, 17:39:03 CEST »
0
Ciao a tutti.. ho un piccolo problema..

Sto utilizzando una ExpandableList popolata da dei dati raccolti in un database..
Il problema è il seguente:
Se non ci sono i dati nel database, vorrei mostrare in un nuovo layout una scritta del tipo "nessun dato trovato.. "

Tuttavia quando eseguo
Codice (Java): [Seleziona]
if (c.getCount()==0){
                setContentView(R.layout.nessun_dato);
        }

l'applicazione crasha con il seguente errore
Codice: [Seleziona]
08-06 17:09:28.451: E/AndroidRuntime(32586): FATAL EXCEPTION: main
08-06 17:09:28.451: E/AndroidRuntime(32586): java.lang.RuntimeException: Unable to start activity ComponentInfo{}: java.lang.RuntimeException: Your content must have a ExpandableListView whose id attribute is 'android.R.id.list'
08-06 17:09:28.451: E/AndroidRuntime(32586): Caused by: java.lang.RuntimeException: Your content must have a ExpandableListView whose id attribute is 'android.R.id.list'

Perchè?
Grazie mille! :)

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:ExpandableList ... problema visualizzazione layout
« Risposta #1 il: 06 Agosto 2012, 19:38:11 CEST »
0
stai usando una list activity?
android gestisce la cosa già per te:
ListActivity | Android Developers
Android-er: ListActivity with @android:id/list and empty
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 mary2501

  • Utente junior
  • **
  • Post: 70
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    htc desire hd
  • Sistema operativo:
    mac , windows xp
Re:ExpandableList ... problema visualizzazione layout
« Risposta #2 il: 06 Agosto 2012, 20:03:18 CEST »
0
No..
Posto il resto del codice
Codice (Java): [Seleziona]
public class ExpList extends ExpandableListActivity {
   
          . . . . . . . . . .

          public void onCreate(Bundle icicle)
            {
               
                super.onCreate(icicle);
               . . . . . . . .
               
                if (c.getCount()==0){
                        setContentView(R.layout.nessuna_tratta);
                }
                else{
            . . . .  . ..  .
    db.close();
   
   

    SimpleExpandableListAdapter expListAdapter =
                        new SimpleExpandableListAdapter(
                                this,
                                createGroupList(),      // groupData describes the first-level entries
                                R.layout.child_row,     // Layout for the first-level entries
                                new String[] { "colorName" },   // Key in the groupData maps to display
                                new int[] { R.id.childname },           // Data under "colorName" key goes into this TextView
                                createChildList(),      // childData describes second-level entries
                                R.layout.child_row,     // Layout for second-level entries
                                new String[] { "shadeName", "rgb" },    // Keys in childData maps to display
                                new int[] { R.id.childname, R.id.rgb }  // Data under the keys above go into these TextViews
                        );
                setListAdapter( expListAdapter );
    }
   
}          
/**
  * Creates the group list out of the nome_etichette[] array according to
  * the structure required by SimpleExpandableListAdapter. The resulting
  * List contains Maps. Each Map contains one entry with key "colorName" and
  * value of an entry in the nome_etichette[] array.
  */

        private List createGroupList() {
          ArrayList result = new ArrayList();
          for( int i = 0 ; i < indice_etichette ; ++i ) {
                HashMap m = new HashMap();
            m.put( "colorName",nome[i] );
                result.add( m );
          }
          return (List)result;
    }

/**
  * Creates the child list out of the shades[] array according to the
  * structure required by SimpleExpandableListAdapter. The resulting List
  * contains one list for each group. Each such second-level group contains
  * Maps. Each such Map contains two keys: "shadeName" is the name of the
  * shade and "rgb" is the RGB value for the shade.
  */

  private List createChildList() {
        ArrayList result = new ArrayList();
        for( int i = 0 ; i < shades.length ; ++i ) {
// Second-level lists
          ArrayList secList = new ArrayList();
          for( int n = 0 ; n < indice[i] ; n += 2 ) {
            HashMap child = new HashMap();
                child.put( "shadeName", shades[i][n] );
            child.put( "rgb", shades[i][n+1] );
                secList.add( child );
          }
          result.add( secList );
        }
        return result;
  }
 
 
}
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout
                xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
 
     <ExpandableListView android:id="@+id/android:list"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"/>
 
     <TextView android:id="@+id/android:empty"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:text="Main"/>
   
</LinearLayout>

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:ExpandableList ... problema visualizzazione layout
« Risposta #3 il: 06 Agosto 2012, 20:06:47 CEST »
0
è previsto anche sulla expandable
ExpandableListActivity | Android Developers
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 mary2501

  • Utente junior
  • **
  • Post: 70
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    htc desire hd
  • Sistema operativo:
    mac , windows xp
Re:ExpandableList ... problema visualizzazione layout
« Risposta #4 il: 06 Agosto 2012, 21:03:39 CEST »
0
Ok forse ho capito dove sta il problema ma non so comunque risolverlo..
Io inizializzo i vettori stringhe etichette e i vettori stringhe dei figli.. Le inizializzo a una cifra ipotetica es. di dimensione 30 con il carattere "".
Di conseguenza non manderà mai a schermo la texview con id empty perchè in realtà non è empty!!

Proprio per questo volevo farlo manualmente.. ovvero... fare un controllo se il database contiene degli elementi e se non li contiene dare io il comando per cambiare il layout...
Si può?

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:ExpandableList ... problema visualizzazione layout
« Risposta #5 il: 06 Agosto 2012, 21:08:11 CEST »
0
non mi è chiaro cosa e perchè tu lo faccia, però ti basta tenere lo stesso layout, mettere visibility.GONE sulla listVIew e visibility.Visible sulla textview.

Ripeto però, non ho capito perchè inizializzi dei dati a stringa vuota...
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 mary2501

  • Utente junior
  • **
  • Post: 70
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    htc desire hd
  • Sistema operativo:
    mac , windows xp
Re:ExpandableList ... problema visualizzazione layout
« Risposta #6 il: 06 Agosto 2012, 21:09:44 CEST »
0
Forse c'è un modo più semplice che mi sfugge.. io devo popolare la ExpandableList ma non so a monte quanti figli e quanti "padri" ci saranno.. Quindi metto una cifra ipotetica max ..

C'è un modo più semplice? Ho le radici ancora nel linguaggio c :P

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:ExpandableList ... problema visualizzazione layout
« Risposta #7 il: 06 Agosto 2012, 21:13:12 CEST »
0
non dovrebbe servirti sapere quanti sono, l'adapter si "adatta" ai dati e mostra quante etichette e figli tu gli dai...
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 mary2501

  • Utente junior
  • **
  • Post: 70
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    htc desire hd
  • Sistema operativo:
    mac , windows xp
Re:ExpandableList ... problema visualizzazione layout
« Risposta #8 il: 06 Agosto 2012, 23:06:34 CEST »
0
E come ? Avresti qualche link ? nella guida che ho trovato io dichiarava padri e figli all'inizio....
Ti cito il link:  http://mylifewithandroid.blogspot.it/2008/05/expandable-lists.html

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:ExpandableList ... problema visualizzazione layout
« Risposta #9 il: 07 Agosto 2012, 01:27:50 CEST »
0
link no, però sinceramente adotterei la stessa tecnica che si usa per le listview.

Ti tiri fuori i dati dal db e te li metti in una struttura comoda per te e per la explist (questo sta a te), dopodichè ti estendi l'adapter base e ti fai vari metodi.
Quando vuoi (nell'onResume, dopo un tot di tempo o ad un certo evento), avvii una procedura che ti agggiorna la struttura dati (e quindi l'adapter), dopo di che, come per la listView chiami i metodi di notifica aggiornamento lista....
BaseExpandableListAdapter | Android Developers
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