Autore Topic: Alberatura ad n livelli  (Letto 519 volte)

Offline dom4

  • Utente normale
  • ***
  • Post: 158
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Vodafone Ideos, Nexus 5
Alberatura ad n livelli
« il: 10 Febbraio 2012, 11:13:05 CET »
0
Salve ragazzi,
dovrei creare un'alberatura di un impianto ad n livelli,vedendo un pò in giro non ho trovato nulla che facesse al caso mio.Non posso utilizzare una expandableListView perchè arriva massimo a 2 livelli.Allora per ovviare al problema avrei pensato di risolvere in questo modo.Creo una listView contenente i padri,e nascondo nella riga della listview un'altra listview,che dovrebbe visualizzarsi al click su padre.

Questo è l'xml della riga padre
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
    >


    <TextView
       android:id="@+id/textViewDescrizioneUL"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignParentLeft="true"
       android:layout_alignParentTop="true"
       android:text="Descrizione unità logica"
       android:textColor="@color/red"
       android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
       android:id="@+id/textViewReparto"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignParentLeft="true"
       android:layout_below="@+id/textViewDescrizioneUL"
       android:text="Reparto : "
       android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
       android:id="@+id/textViewRepartoUL"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignBaseline="@+id/textViewReparto"
       android:layout_alignBottom="@+id/textViewReparto"
       android:layout_toRightOf="@+id/textViewReparto"
       android:text="reparto"
       android:textAppearance="?android:attr/textAppearanceSmall" />


    <TextView
       android:id="@+id/textViewArea"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignTop="@+id/textViewRepartoUL"
       android:layout_toRightOf="@+id/textViewRepartoUL"
       android:text="Area : "
       android:layout_marginLeft="5dip"
       android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
       android:id="@+id/textViewAreaUL"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignBaseline="@+id/textViewArea"
       android:layout_alignBottom="@+id/textViewArea"
       android:layout_toRightOf="@+id/textViewArea"
       android:text="area"
       android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
       android:id="@+id/textViewStabilimento"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignParentLeft="true"
       android:layout_below="@+id/textViewReparto"
       android:text="Stabilimento : "
       android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
       android:id="@+id/textViewStabilimentoUL"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignBaseline="@+id/textViewStabilimento"
       android:layout_alignBottom="@+id/textViewStabilimento"
       android:layout_toRightOf="@+id/textViewStabilimento"
       android:text="stabilimento"
       android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
       android:id="@+id/textViewPiano"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignBaseline="@+id/textViewStabilimentoUL"
       android:layout_alignBottom="@+id/textViewStabilimentoUL"
       android:layout_toRightOf="@+id/textViewStabilimentoUL"
       android:text="Piano : "
       android:layout_marginLeft="5dip"
       android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
       android:id="@+id/textViewPianoUL"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignBaseline="@+id/textViewPiano"
       android:layout_alignBottom="@+id/textViewPiano"
       android:layout_toRightOf="@+id/textViewPiano"
       android:text="piano"
       android:textAppearance="?android:attr/textAppearanceSmall" />

   
    <ListView
       android:id="@+id/listViewFigli"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_alignParentLeft="true"
       android:layout_below="@+id/textViewStabilimento"
       android:visibility="gone"
       android:layout_marginLeft="29dp" >
    </ListView>

</RelativeLayout>

Mentre questo è l'xml di quella che dovrebbe essere la riga figlia(il layout della riga è identico a quella del padre):
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
    >


    <TextView
       android:id="@+id/textViewDescrizioneUL"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignParentLeft="true"
       android:layout_alignParentTop="true"
       android:text="Descrizione unità logica"
       android:textColor="@color/red"
       android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
       android:id="@+id/textViewReparto"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignParentLeft="true"
       android:layout_below="@+id/textViewDescrizioneUL"
       android:text="Reparto : "
       android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
       android:id="@+id/textViewRepartoUL"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignBaseline="@+id/textViewReparto"
       android:layout_alignBottom="@+id/textViewReparto"
       android:layout_toRightOf="@+id/textViewReparto"
       android:text="reparto"
       android:textAppearance="?android:attr/textAppearanceSmall" />


    <TextView
       android:id="@+id/textViewArea"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignTop="@+id/textViewRepartoUL"
       android:layout_toRightOf="@+id/textViewRepartoUL"
       android:text="Area : "
       android:layout_marginLeft="5dip"
       android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
       android:id="@+id/textViewAreaUL"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignBaseline="@+id/textViewArea"
       android:layout_alignBottom="@+id/textViewArea"
       android:layout_toRightOf="@+id/textViewArea"
       android:text="area"
       android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
       android:id="@+id/textViewStabilimento"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignParentLeft="true"
       android:layout_below="@+id/textViewReparto"
       android:text="Stabilimento : "
       android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
       android:id="@+id/textViewStabilimentoUL"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignBaseline="@+id/textViewStabilimento"
       android:layout_alignBottom="@+id/textViewStabilimento"
       android:layout_toRightOf="@+id/textViewStabilimento"
       android:text="stabilimento"
       android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
       android:id="@+id/textViewPiano"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignBaseline="@+id/textViewStabilimentoUL"
       android:layout_alignBottom="@+id/textViewStabilimentoUL"
       android:layout_toRightOf="@+id/textViewStabilimentoUL"
       android:text="Piano : "
       android:layout_marginLeft="5dip"
       android:textAppearance="?android:attr/textAppearanceSmall" />

    <TextView
       android:id="@+id/textViewPianoUL"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_alignBaseline="@+id/textViewPiano"
       android:layout_alignBottom="@+id/textViewPiano"
       android:layout_toRightOf="@+id/textViewPiano"
       android:text="piano"
       android:textAppearance="?android:attr/textAppearanceSmall" />

    <ListView
       android:id="@+id/listViewFigli"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_alignParentLeft="true"
       android:layout_below="@+id/textViewStabilimento"
       android:visibility="gone"
       android:layout_marginLeft="29dp" >
    </ListView>

</RelativeLayout>

All'interno del codice faccio questo:
Codice (Java): [Seleziona]
for(ArrayList<interventi.UnitaLogica> p :padri)
                {
               
                        for(interventi.UnitaLogica f : p)
                        {
                                Log.i("","Unità logiche padri  : " + f.getDescrizione());  
                                UnitaLogicaAdapter adapter = new UnitaLogicaAdapter(getApplicationContext(), R.layout.row_unitalogica, p);
                        listDettaglioImpianto.setAdapter(adapter);
                        listDettaglioImpianto.setVisibility(View.VISIBLE);
                        }
                }
               
         
                     listDettaglioImpianto.setOnItemClickListener(new OnItemClickListener() {
                         @Override
                         public void onItemClick(AdapterView<?> a, View v, int position, long id) {
                          interventi.UnitaLogica selezionata = (interventi.UnitaLogica) listDettaglioImpianto.getItemAtPosition(position);
                          ArrayList<interventi.UnitaLogica> f = new ArrayList<interventi.UnitaLogica>();
                          f = alberaturaAlVolo(selezionata);   
                          Log.i("","Size f: "+f.size());
                          UnitaLogicaAdapter figliadapter = new UnitaLogicaAdapter(getApplicationContext(), R.layout.row_figliunitalogica, f);
                                     Log.i("","Figli Adapter" + figliadapter.isEmpty() +""+figliadapter.getCount());
                                     listDettaglioImpianto.setVisibility(View.INVISIBLE);
                                     listViewFigliUL.setAdapter(figliadapter);
                                     listViewFigliUL.setVisibility(View.VISIBLE);
                                     
                                          }
                                             });

La listView padri viene visualizzata,ma al click su uno dei padri mi viene dato il seguente errore:
Codice: [Seleziona]
02-10 09:51:26.875: I/(1571): Unità logiche padri  : OPERATION ROOM 1
02-10 09:51:26.895: I/(1571): Unità logiche padri  : OPERATION ROOM 2
02-10 09:51:26.906: I/(1571): Unità logiche padri  : OPERATION ROOM 3
02-10 09:51:26.915: I/(1571): Unità logiche padri  : WARD CORRIDOR
02-10 09:51:26.925: I/(1571): Unità logiche padri  : primo piano
02-10 09:51:30.015: I/(1571): Sto esplorando : OPERATION ROOM 1con id = 1
02-10 09:51:30.035: I/(1571): Numero righe nel cursore : 2
02-10 09:51:30.059: I/(1571): L'unità Logica : OPERATION ROOM 1 ha figli.
02-10 09:51:30.065: I/(1571): Dimensione allUL dopo di add figlio 2
02-10 09:51:30.075: I/(1571): Size f: 2
02-10 09:51:30.075: I/(1571): Figli Adapterfalse2
02-10 09:51:30.075: D/AndroidRuntime(1571): Shutting down VM
02-10 09:51:30.075: W/dalvikvm(1571): threadid=1: thread exiting with uncaught exception (group=0x40015560)
02-10 09:51:30.095: E/AndroidRuntime(1571): FATAL EXCEPTION: main
02-10 09:51:30.095: E/AndroidRuntime(1571): java.lang.NullPointerException
02-10 09:51:30.095: E/AndroidRuntime(1571):         at interventi.DettaglioImpianto$1.onItemClick(DettaglioImpianto.java:111)
02-10 09:51:30.095: E/AndroidRuntime(1571):         at android.widget.AdapterView.performItemClick(AdapterView.java:284)
02-10 09:51:30.095: E/AndroidRuntime(1571):         at android.widget.ListView.performItemClick(ListView.java:3513)
02-10 09:51:30.095: E/AndroidRuntime(1571):         at android.widget.AbsListView$PerformClick.run(AbsListView.java:1812)
02-10 09:51:30.095: E/AndroidRuntime(1571):         at android.os.Handler.handleCallback(Handler.java:587)
02-10 09:51:30.095: E/AndroidRuntime(1571):         at android.os.Handler.dispatchMessage(Handler.java:92)
02-10 09:51:30.095: E/AndroidRuntime(1571):         at android.os.Looper.loop(Looper.java:130)
02-10 09:51:30.095: E/AndroidRuntime(1571):         at android.app.ActivityThread.main(ActivityThread.java:3683)
02-10 09:51:30.095: E/AndroidRuntime(1571):         at java.lang.reflect.Method.invokeNative(Native Method)
02-10 09:51:30.095: E/AndroidRuntime(1571):         at java.lang.reflect.Method.invoke(Method.java:507)
02-10 09:51:30.095: E/AndroidRuntime(1571):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
02-10 09:51:30.095: E/AndroidRuntime(1571):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
02-10 09:51:30.095: E/AndroidRuntime(1571):         at dalvik.system.NativeStart.main(Native Method)

Cliccando sull'errore mi rimanda a questa riga di codice:
Codice (Java): [Seleziona]
listViewFigliUL.setAdapter(figliadapter);Credo che non riesca a settare l'adapter.
Credete che questo approccio sia giusto?Avete qualche suggerimento per implemetare una listview espandibile ad n livelli?