Autore Topic: Dimensione dell'adpater diverso da quello della ListView  (Letto 671 volte)

Offline CoN

  • Nuovo arrivato
  • *
  • Post: 31
  • Respect: 0
    • Mostra profilo
Dimensione dell'adpater diverso da quello della ListView
« il: 22 Giugno 2012, 12:22:13 CEST »
0
Ciao a tutti, spero possiate essermi di aiuto. Vi spiego il problema:
Ho creato un custom adapter che estende cursor adapter, successivamente ho dichiarato una listview ed ho settato la l'adapter alla lista (listview.setAdapter(adapter)). Fino ad ora tutto bene, il problema sorge nel momento in cui clicco su un item della lista,  poichè la dimensione della lista risulta essere differente dalla dimensione del cursor che la popola. Vi posto il codice per spiegarmi meglio:
Codice (Java): [Seleziona]
Cursor call = db.getListaInterventi("", "", "", 0);
adapter = new InterventiCursorAdapter(InterventiActivity.this, call);
il cursor call ha una dimensione pari a 35.
Codice (Java): [Seleziona]
            listaInterventi.setOnItemClickListener(new OnItemClickListener() {
                       
                        @Override
                        public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
//                              adapter = (InterventiCursorAdapter) ((ListView) adapterView).getAdapter();
                                if(cancellato == true){
                                        idcolor = 0;
                                        cancellato = false;
                                }
                       
                                Cursor c4 = (Cursor) listaInterventi.getItemAtPosition(position);                      
                                Log.i("","c4.count:"+c4.getCount()); // 35
                                Log.i("","POSITION:"+position);
                                Log.i("","dim lista:"+listaInterventi.getChildCount()); //15
                               
                                if(idcolor >= 0){
                                        if(idcolor != 0 || primo == true){
                                                listaInterventi.getChildAt(idcolor).setBackgroundColor(Color.WHITE);
                                        }
                                }
                                idcolor = position;
                                if(position == 0)
                                        primo = true;
                                else
                                        primo = false;
                               
                                listaInterventi.getChildAt(position).setBackgroundColor(Color.GREEN);
                               
                                String dataInizio = c4.getString(c4.getColumnIndex("StartDate"));
                                Log.i("","dataInizio:"+dataInizio);
                                String oraInizio = c4.getString(c4.getColumnIndex("StartTime"));
                                Log.i("","oraInizio:"+oraInizio);
                                tipoIntervento = c4.getString(c4.getColumnIndex("Tipo"));
                                Log.i("","tipoIntervento:"+tipoIntervento);
                                idIntervento = c4.getInt(c4.getColumnIndex("ID"));
                                Log.i("","idIntervento:"+idIntervento);
                                inserimento = c4.getInt(c4.getColumnIndex("Inserimento"));
                                notes = c4.getString(c4.getColumnIndex("Notes"));
                               
                                Cursor c = db.getCliente(dataInizio, oraInizio, tipoIntervento, idIntervento);
                                c.moveToFirst();
                                rag_soc = c.getString(c.getColumnIndex("RagioneSociale"));
                                descrizione = c.getString(c.getColumnIndex("Descrizione"));
                                id_intervento_componente = idIntervento;
                                id_imp = c.getInt(c.getColumnIndex("ID"));

                                dett1.setText("Cliente:" +rag_soc);
                                dett2.setText("Impianto:" +descrizione);
                                dett3.setText("Dettaglio Intervento:"+notes);
                }
                });
           
    }
Il problema è che il cursor ha dimensione 35 mentre la listview ha dimensione 15 e nel momento in cui selezione l'item in position 16  mi da un NullPointerException su listaInterventi.getChildAt(position).

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Dimensione dell'adpater diverso da quello della ListView
« Risposta #1 il: 23 Giugno 2012, 18:29:45 CEST »
0
Ma come mai la dimensione è diversa? Un filtro?
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline CoN

  • Nuovo arrivato
  • *
  • Post: 31
  • Respect: 0
    • Mostra profilo
Re:Dimensione dell'adpater diverso da quello della ListView
« Risposta #2 il: 25 Giugno 2012, 10:19:56 CEST »
0
Ciao, questo non riesco a capire, nn ho usato filtri, per completezza ti posto l'adapter:
Codice (Java): [Seleziona]
lass InterventiCursorAdapter extends CursorAdapter {
        private LayoutInflater inflater;

        public InterventiCursorAdapter(Context context, Cursor c) {
                super(context, c);
                inflater = LayoutInflater.from(context);
        }

        @Override
        public void bindView(View view, Context context, Cursor cursor) {
                TextView startDate = (TextView) view.findViewById(R.id.sDate);
                TextView tipo = (TextView) view.findViewById(R.id.type);
                        ((TextView) view.findViewById(R.id.Note)).setText(
                                        cursor.getString(cursor.getColumnIndex(Event.Notes)));

                        String type = cursor.getString(cursor.getColumnIndex(Intervento.Tipo));
                        if(type.equals("Straordinario"))
                                tipo.setText("S");
                        else if(type.equals("Ordinario"))
                                tipo.setText("O");

                        String sdata = cursor.getString(cursor.getColumnIndex("StartDate"));
                        String sanno = sdata.substring(0,4);
                        String smese = sdata.substring(5,7);
                        String sgiorno = sdata.substring(8);
                        String nuovaData = sgiorno.concat("/").concat(smese).concat("/").concat(sanno);
                        startDate.setText(nuovaData);
        }

        @Override
        public View newView(Context context, Cursor cursor, ViewGroup parent) {
                return inflater.inflate(R.layout.riga_listview, null);
        }
}

Mi sorge un dubbio però, siccome la lista è lunga vengono visualizzati solo i primi 15 item, esattamente la dimensione che mi da della lista, può essere un problema di scroller?? Se ad esempio seleziono il secondo item e poi comincio a scrollare, si selezionano anche altri sue item a casaccio, sfasa tutto.