Autore Topic: ExpandableListView che impazzisce  (Letto 474 volte)

Offline Lomba1986

  • Utente normale
  • ***
  • Post: 173
  • Respect: +1
    • Mostra profilo
ExpandableListView che impazzisce
« il: 12 Ottobre 2011, 15:47:22 CEST »
0
Ciao a tutti ho necessità della vostra encicolpedica cultura perchè ho provato ad usare la ExpandableListView, ma temo di non aver ben capito come si usa...

Ho trovato un piccolo tutorial a questo indirizzo Tech Droid: ExpandableListView on Android

e magheggiando un po' il codice ho ottenuto quello che mi serviva, ma durante un po' di test mi sono accorto che si omporta anomalmente:

Attualmente ho 3 righe all'interno della lista e ogni gruppo può contenere un numero casuale di elementi.
Se apro un solo gruppo alla volta nessun problema...ma i casini iniziano quando apro più gruppi assieme...

_ Apro un gruppo con 1 elemento; quando apro un altro gruppo con più elementi ecco che l'elemento posto nel primo gruppo aperto cambia, come se venisse aggiornato
_se apro un gruppo con meno elementi di un altro gruppo già aperto mi da errore del tipo java.lang.ArrayIndexOutOfBoundsException

Come mai vi chiedo io? Sembra quasi che ogni volta lui ridisegni la lista facendo scorrere i vari gruppi e aggiungendo un elemento alla volta per ciascuno di essi...

vi posto il codice della lista...la parte personalizzata
Codice (Java): [Seleziona]
private class MyExpandableListAdapter extends BaseExpandableListAdapter
    {
            private String [] prodottiDaDividere;
            private Integer[] mThumbIds;
        @Override
            public boolean areAllItemsEnabled()
            {
                return true;
            }

        private Context context;

        public MyExpandableListAdapter(Context context, Boolean [] evaso)
        {
            this.context = context;
            mThumbIds = new Integer [evaso.length];
            for(int i=0;i<evaso.length;i++)
            {
                if(evaso[i])
                        mThumbIds[i]=R.drawable.track_icon_white;
                else
                        mThumbIds[i]=R.drawable.clock_icon_white;
            }
        }      
        public String getChild(int groupPosition, int childPosition)
        {
                return righeDettaglio[childPosition];
                //da dividere ancora
        }
        public long getChildId(int groupPosition, int childPosition)
        {
                return childPosition;
        }

        public int getChildrenCount(int groupPosition)
        {
            int i = 0;
            try
            {
                prodottiDaDividere =  righeDettaglio[groupPosition].split("£");
                i = prodottiDaDividere.length;
            }
            catch (Exception e)
            {
                System.out.println("Errore--> "+e);
            }
            return i;
        }
        @Override
        public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
                ViewGroup parent)
        {
            String group = (String) getGroup(groupPosition);
            if (convertView == null)
            {
                LayoutInflater infalInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = infalInflater.inflate(R.layout.group_layout, null);
            }
            TextView tv = (TextView) convertView.findViewById(R.id.tvGroup);
            tv.setText(group);
            ImageView icon = (ImageView) convertView.findViewById(R.id.iconaExpandableList);
            icon.setImageResource(mThumbIds[groupPosition]);
            return convertView;
        }
        @Override
        public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
                View convertView, ViewGroup parent)
        {
            if (convertView == null)
            {
                LayoutInflater infalInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = infalInflater.inflate(R.layout.child_layout, null);
            }
            TextView tv = (TextView) convertView.findViewById(R.id.tvChild);
            tv.setText(prodottiDaDividere[childPosition]);
            System.out.println("__________________________________________");
            System.out.println("gruppo:"+ groupPosition+" figlio: "+childPosition);
            System.out.println("------> "+prodottiDaDividere[childPosition]);

            // Depending upon the child type, set the imageTextView01
            tv.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
            return convertView;
        }
        public Object getGroup(int groupPosition)
        {
                return dataPagamento[groupPosition];
        }
        public int getGroupCount()
        {
                return dataPagamento.length;
        }
        public long getGroupId(int groupPosition)
        {
                return groupPosition;
        }
        public boolean isChildSelectable(int groupPosition, int childPosition)
        {
                return true;
        }
        public boolean hasStableIds()
        {
                return true;
        }
    }


Sinceramente mi pare assurdo che l'utente non possa tenere aperti più gruppi contemporaneamente e mi sembra assurdo che all'apertura di un nuovo gruppo il sistema aggiorni tutto quanto....

Non riesco a capire dov'è l'errore...

Ciao a tutti e grazie
Non esistono problemi, ma solo soluzioni...

Offline Lomba1986

  • Utente normale
  • ***
  • Post: 173
  • Respect: +1
    • Mostra profilo
Re:ExpandableListView che impazzisce
« Risposta #1 il: 14 Ottobre 2011, 10:18:26 CEST »
0
Ho risolto....  :D

Era un problema di gestione dei child che aggiornavo contemporaneamente tutti i child in una certa posizione di tutti i gruppi


Non esistono problemi, ma solo soluzioni...