2013-08-22 18 views
13

Sto lavorando al riutilizzo della cella e attualmente sto lavorando nel metodo getview dell'adattatore e ho avuto un problema che il mio metodo getview ha chiamato 9 volte ma dovrebbe chiamare solo 5 volte all'avvio dell'app perché sto visualizzando solo 5 righe.Getview Chiamato più volte in Android

public View getView(int position, View view, ViewGroup viewgroup) 
{ 
    ViewHolder holder=null; 

    if(view==null) 
     { 
       view = inflater.inflate(R.layout.my_row_layout, viewgroup, false); 
       Log.d("Testing","View is nuLL"); 
       holder.thumbnils = (ImageView)view.findViewById(R.id.Thumbnils); 
        holder.hover =(ImageButton)view.findViewById(R.id.hover); 
        holder.title =(TextView)view.findViewById(R.id.title); 
        holder.hoveroverlay =(ImageView)view.findViewById(R.id.hoveroverlay); 
       }view.setTag(holder); 
      } 
     else 
    { 
     Log.d("Testing","view is not null"); 

     holder = (ViewHolder) view.getTag(); 
     } 

      return view; 
     } 

      @Override 
public int getCount() { 
    // TODO Auto-generated method stub 

    if(data.size()%NumberOfCell==0) 
    { 
     //return Number rows in listview 
     return data.size() /NumberOfCell; 

    } 
    else 
    { 
     //If total number of videos are ODD than display one row extra for remaining videos 
     return data.size() /NumberOfCell+1; 
    } 

} 

@Override 
public Object getItem(int position) { 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public long getItemId(int position) { 
    // TODO Auto-generated method stub 
    return 1; 
} 

    Here is my xml 

<ListView 
    android:id="@+id/listView1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_above="@+id/imageView2" 
    android:layout_alignLeft="@+id/linearLayout1" 
    android:layout_below="@+id/linearLayout1" 
    android:scrollbars="none" 
    android:divider="#000000" 
     android:dividerHeight="2dp" 
    > 
</ListView> 
    </RelativeLayout> 

Please help me ragazzi Grazie .........

+0

qui dove puoi gonfiare la tua vista? – Piyush

+0

scusate mi sono dimenticato di digitare il codice inflat in questione .. –

+0

Ok .... no .... E in get Count e getItem method what is return? Le righe supplementari – Piyush

risposta

61

Fai la tua listview altezza uguale a fill_parent e riprovare ..

+1

funziona ma strano problema .. perché funziona? –

+6

@NSArray Come Romain Guy ha suggerito nella sua risposta Questo non è un problema, non c'è assolutamente alcuna garanzia sull'ordine in cui getView() sarà chiamato né quante volte. Nel tuo caso particolare stai facendo la cosa peggiore possibile con un ListView dandogli un'altezza = wrap_content. Ciò costringe ListView a misurare alcuni bambini fuori dall'adattatore al momento del layout, per sapere quanto dovrebbe essere grande. Questo è ciò che fornisce ListView con le immagini convertite che vedi passato a getView() prima ancora di scorrere. –

+0

@NSArray si riferisce al mio post per maggiori dettagli http://stackoverflow.com/a/14108676/1939564 –

0

Prova così ...

public View getView(int position, View convertView, ViewGroup viewgroup) 
{ 
View view = convertView; 
    ViewHolder holder=null; 

    if(convertView==null) 
     { 
       view = inflater.inflate(R.layout.my_row_layout, viewgroup, false); 
       Log.d("Testing","View is nuLL"); 
       holder.thumbnils = (ImageView)view.findViewById(R.id.Thumbnils); 
        holder.hover =(ImageButton)view.findViewById(R.id.hover); 
        holder.title =(TextView)view.findViewById(R.id.title); 
        holder.hoveroverlay =(ImageView)view.findViewById(R.id.hoveroverlay); 
       view.setTag(holder); 
      } 
     else 
    { 
     Log.d("Testing","view is not null"); 

     holder = (ViewHolder) view.getTag(); 
     } 
} 
Problemi correlati