Autore Topic: Listview e arrayadapter  (Letto 1359 volte)

Offline jocker99

  • Nuovo arrivato
  • *
  • Post: 39
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    samsung galaxy mini 2
  • Sistema operativo:
    debian 6 - 64 bit
Listview e arrayadapter
« il: 28 Luglio 2012, 06:28:55 CEST »
0
Salve ragazzi ho questo strano problema, ho realizzato una app che scarica un file xml, tutto funziona bene,  del file xml conservo due campi titolo e descrizione, questo vengono passati ad un ArrayAdapter per essere visualizzati in un listviev, (per Arrayadapter ho preso spunto dall'esempio CustomArrayAdapter del libro di carli) tutto funziona bene ma la visualizzazione non e' ottimale, infatti in alto viene visualizzato il campo titolo poi dopo 2-3 cm sotto viene visualizzato il campo descrizione poi viene lasciato un altro spazio di 3-4 cm e poi fà visualizzare il record successivo
di seguito vi posto i file xml del main.xml


Codice (XML): [Seleziona]
  <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/header"
  android:layout_width="fill_parent"
  android:layout_height="match_parent"
  android:orientation="vertical" >

<LinearLayout
  android:id="@+id/header1"
  android:layout_width="fill_parent"
  android:layout_height="match_parent"
  android:layout_weight="5"
  android:gravity="center"
  android:orientation="horizontal" >

<Button
      android:id="@+id/buttonAbout"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_weight="1"
      android:text="About" />
<Button
      android:id="@+id/buttonAggiorna"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
       android:layout_weight="1"
      android:text="Aggiorna" />
       
 </LinearLayout>

<LinearLayout
  android:id="@+id/header0"
  android:layout_width="fill_parent"
  android:layout_height="match_parent"
  android:layout_weight="1"
  android:orientation="horizontal" >

<ListView
      android:id="@+id/arrayList"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
       />
       
 </LinearLayout>


</LinearLayout>


 di seguito vi posto il file xml, per la visualizzazione del singolo record


Codice (XML): [Seleziona]
 <?xml version="1.0" encoding="utf-8"?>

<TableLayout android:layout_width="fill_parent"
 xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/row_container"
        android:padding="1px"
        android:layout_height="wrap_content"
        android:shrinkColumns="0">
  <!-- Prima riga -->
  <TableRow>
                <TextView android:layout_width="wrap_content"
                        android:layout_height="wrap_content" android:id="@+id/titolo"
                        android:text="@string/titolo_string" >
                        </TextView>
                <TextView android:layout_height="wrap_content"
                        android:layout_width="wrap_content" android:layout_toRightOf="@+id/titolo"
                        android:layout_alignParentRight="true"
                        android:paddingLeft="3px"
                        android:text="default_value"
                        android:id="@+id/tiloloRecord">
                        </TextView>
        </TableRow>
        <!--Seconda colonna  -->
        <TableRow>
                <TextView android:layout_height="wrap_content"
                        android:layout_width="wrap_content"
                         android:layout_below="@+id/titolo"
                        android:id="@+id/descrizione"
                        android:text="@string/descrizione"
                        ></TextView>
                <TextView android:layout_height="wrap_content"
                        android:layout_below="@+id/TextView01" android:layout_width="wrap_content"
                        android:layout_toRightOf="@+id/descrizione"
                        android:layout_alignParentRight="true"
                        android:paddingLeft="3px"
                        android:text="default_value"
                        android:id="@+id/descrizioneRecord"></TextView>
        </TableRow>    
   
</TableLayout>  

grazie mille per l'aiuto

Offline andre9004

  • Nuovo arrivato
  • *
  • Post: 33
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Lg Optimus Hub
  • Sistema operativo:
    Windows 7
Re:Listview e arrayadapter
« Risposta #1 il: 28 Luglio 2012, 14:14:41 CEST »
0
prova a mettere alla table row l'altezza a wrap_content e la largezza a fill_parent o match_parent (in base alle api che usi)

Offline jocker99

  • Nuovo arrivato
  • *
  • Post: 39
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    samsung galaxy mini 2
  • Sistema operativo:
    debian 6 - 64 bit
Re:Listview e arrayadapter
« Risposta #2 il: 28 Luglio 2012, 18:23:24 CEST »
0
come da te consigliato ho modificato il file record.xml cosi':

Codice (XML): [Seleziona]
 <?xml version="1.0" encoding="utf-8"?>

<TableLayout android:layout_width="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/row_container"
       android:padding="1px"
       android:layout_height="wrap_content"
       android:shrinkColumns="0">
  <!-- Prima riga -->
  <TableRow  
  android:layout_height="wrap_content"
  android:layout_width="fill_parent">
                <TextView android:layout_width="wrap_content"
                       android:layout_height="wrap_content" android:id="@+id/titolo"
                       android:text="@string/titolo_string" >
                        </TextView>
                <TextView android:layout_height="wrap_content"
                       android:layout_width="wrap_content" android:layout_toRightOf="@+id/titolo"
                       android:layout_alignParentRight="true"
                       android:paddingLeft="3px"
                       android:text="default_value"
                       android:id="@+id/tiloloRecord">
                        </TextView>
        </TableRow>

ma niente da fare, anche se cambio e utilizzo match_parent

posto anche il codice java che mi permette la visualizzazione dei dati
Codice (Java): [Seleziona]
 ListView listView= (ListView) findViewById(R.id.arrayList);
        arrayAdapter= new ArrayAdapter<CustomItem>(
                                this, R.layout.record, R.id.titolo, createItems())
                                {public View getView(int position, View convertView, ViewGroup parent){
               
                                        return getViewHolder(position,convertView,parent);
                                                                }
        private View getViewHolder(int position, View convertView,ViewGroup parent) {
                               
                                        // Creiamo il riferimento all'holder
                                        ViewHolder viewHolder;
                                        // Se non presente una istanza della View la creiamo attraverso
                                        // inflating. Se già presente la riutilizziamo
                                        if(convertView==null){
                                                // Otteniamo il riferimento alla View da parserizzare
        LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                                                convertView = inflater.inflate(R.layout.record, null);
                                                // Creiamo un Holder associato
                                                viewHolder = new ViewHolder();
                        // Assegnamo i riferimenti alle textView ++++ con tuoi aggiornamenti +++++
        viewHolder.titoloRecordView = (TextView)convertView.findViewById(R.id.tiloloRecord);
        viewHolder.descrizioneRecordView = (TextView)convertView.findViewById(R.id.descrizioneRecord);
                        // Lo assegnamo come Tag della View
                                convertView.setTag(viewHolder);
                                        }else{
                                                // La View esiste già per cui possiede già l'holder
                                                viewHolder = (ViewHolder)convertView.getTag();
                                        }
                                        // Otteniamo l'elemento i-esimo
                                        CustomItem item = getItem(position);
                                        // Assegnamo i valori +++ con tutoi aggiornamenti ++++++
                                viewHolder.titoloRecordView.setText(item.getTitoloRecord());
                                viewHolder.descrizioneRecordView.setText(item.getDescrizioneRecord());
                                        // Ritorniamo la View
                                        return convertView;
                                }// fine getVieWholder 
                                }; // fine arrayadapter                                                                        
                                listView.setAdapter(arrayAdapter);     

Offline andre9004

  • Nuovo arrivato
  • *
  • Post: 33
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Lg Optimus Hub
  • Sistema operativo:
    Windows 7
Re:Listview e arrayadapter
« Risposta #3 il: 28 Luglio 2012, 18:52:44 CEST »
0
 :-\ non ne ho idea ... cavolo 3-4 cm sono tanti...

Offline jocker99

  • Nuovo arrivato
  • *
  • Post: 39
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    samsung galaxy mini 2
  • Sistema operativo:
    debian 6 - 64 bit
Re:Listview e arrayadapter
« Risposta #4 il: 29 Luglio 2012, 20:41:13 CEST »
0
ho scoperto dove e' presente l'errore, in pratica i dati che passavo alla listview erano troppi rispetto a quello che riusciva a gestire,in pratica
togliendo le righe
Codice (XML): [Seleziona]
 <TextView android:layout_width="wrap_content"
                      android:layout_height="wrap_content" android:id="@+id/titolo"
                      android:text="@string/titolo_string" >
                        </TextView>
e
Codice (XML): [Seleziona]
    <TextView android:layout_height="wrap_content"
                       android:layout_width="wrap_content"
                        android:layout_below="@+id/titolo"
                       android:id="@+id/descrizione"
                       android:text="@string/descrizione"
                       ></TextView>

tutto funziona perfettamente,
Il comportamento  di android era "standard" per indicare che c'era dei dati "traboccanti" che non potevano essere visualizzati
ringrazio tutti per l'aiuto e in particolare andre9004