Autore Topic: da tablelayout a listview  (Letto 737 volte)

Offline Atomico

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Sony Xperia Neo V
  • Sistema operativo:
    Windows 7
da tablelayout a listview
« il: 25 Settembre 2012, 11:19:47 CEST »
0
ciao a tutti... ho creato una classe che implementa un tablelayout e tutto funziona bene.. il problema però è che la tabella a volta è molto grande (è formata da 60 righe e ogni riga ha 3 textview x un totale di 180 oggetti, questo porta ad avere anr e ovviamente ci mette un po' prima di caricarla... chiedendo un po' in giro mi hanno suggerito di usare una listview che dovrebbe migliorare di molto le prestazioni.

è vero? se mi sposto su una listview non avrò + rallentamenti in fase di creazione?

la classe è questa:
Codice: [Seleziona]
public class mostraRisultatiActivity extends Activity{
        @Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mostra_risultati);
       
        int cnt = 0;
        final TableLayout tl = (TableLayout ) findViewById(R.id.tabellaRisultati);
       
        for (Esame e : Db.risposteDate){
            TableRow tr = new TableRow(this);

            TextView lbl1 = new TextView(this);
            TextView lbl2 = new TextView(this);
            TextView lbl3 = new TextView(this);
            tr.setGravity(Gravity.CENTER);
            lbl1.setGravity(Gravity.CENTER_VERTICAL);
            lbl3.setGravity(Gravity.CENTER);
           
            lbl1.setTextColor(android.graphics.Color.RED);
                    lbl2.setTextColor(android.graphics.Color.RED);
                    lbl3.setTextColor(android.graphics.Color.RED);
           
            lbl1.setLayoutParams( new TableRow.LayoutParams( 0, android.view.ViewGroup.LayoutParams.WRAP_CONTENT, 1 ) );
            lbl2.setLayoutParams( new TableRow.LayoutParams( 0, android.view.ViewGroup.LayoutParams.WRAP_CONTENT, 7 ) );
            lbl3.setLayoutParams( new TableRow.LayoutParams( 0, android.view.ViewGroup.LayoutParams.WRAP_CONTENT, 1 ) );
                              
            lbl1.setText(e.getDomandaNum()+"");
            lbl2.setText(Html.fromHtml(e.getTesto()+"<br />"));
            lbl3.setText(e.getRispostaData());
                               
            tr.addView(lbl1);
            tr.addView(lbl2);
            tr.addView(lbl3);
            tl.addView(tr);
                if (e.getRispostaData() != null && e.getRispostaData().equals(e.getRispostaReale())){
                        cnt++;
                        lbl1.setTextColor(android.graphics.Color.GREEN);
                lbl2.setTextColor(android.graphics.Color.GREEN);
                lbl3.setTextColor(android.graphics.Color.GREEN);
                }
        }
        double percentualeSucceso = (cnt*100)/Db.risposteDate.size();
       
        final TextView risposteTotTV = (TextView) findViewById(R.id.risultatiTot);
        final TextView riassuntorisTV = (TextView) findViewById(R.id.risRiassunto);
        final TextView esitoTV = (TextView) findViewById(R.id.esito);
       
        risposteTotTV.setText(Html.fromHtml("<b><big>TOT</big></b>" +  "<br />" +
                        Db.risposteDate.size()));
        riassuntorisTV.setText(Html.fromHtml("<b>Risposte corrette: </b>" +cnt+  "<br />" +
                    "Percentuale: "+percentualeSucceso+"%"));
        if (percentualeSucceso >= 90) {
                esitoTV.setText(Html.fromHtml("<b><big>Esito</big></b>        <br />" +
                                                                          "<small>PROMOSSO</small>"));
        } else {
                esitoTV.setText(Html.fromHtml("<b><big>Esito</big></b>  <br />" +
                                                                                    "<small>BOCCIATO</small>"));
        }
       
        }
}

non ho capito però come funzione questa listview... ho creato una listview e poi ho creato un altro layout con all'interno 3 textview x la singola riga... ma ora non so come creare l'adapter.

un aiutino? :)

grazie ciao

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:da tablelayout a listview
« Risposta #1 il: 25 Settembre 2012, 11:38:59 CEST »
0
Si, la ListView potrebbe risolvere almeno in parte i problemi che descrivi, essenzialmente perchè non vengono caricate e create tutte le View che la compongono, ma via via solo quelle visualizzate.

Per imparare ad usare la ListView c'è un eccellente tutorial nel forum:
[medio] ListView con layout personalizzato tramite un SimpleAdapter - Android Developers Italia
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Atomico

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Sony Xperia Neo V
  • Sistema operativo:
    Windows 7
Re:da tablelayout a listview
« Risposta #2 il: 25 Settembre 2012, 12:02:41 CEST »
0
allora ho visto il tutorial e ho creato una listview scema e devo dire che è instantanea.. il problema ora è che non so come settare il colore delle scritte a seconda di una determinata condizione (vedi code).

ho capito che bisogna usare un custom adapter...  ma in questo custom cosa devo ridefinire oltre al metodo getView()?
« Ultima modifica: 25 Settembre 2012, 12:42:57 CEST da Atomico »