2014-09-09 7 views
7

Hi sotto è la mia classe per baseadapter, ma non funziona correttamente:ListView con più tipi di layout di fila - BaseAdapter non funziona correttamente in Android

private static class MyBaseAdapter extends BaseAdapter { 

     private Context context; 

     private LayoutInflater inflater; 


     private MyBaseAdapter(Context context, FlipViewController controller) { 
      inflater = LayoutInflater.from(context); 
      this.context = context; 

     } 

     @Override 
     public int getCount() { 
      return Globals.list_album.size(); 
     } 

     @Override 
     public Object getItem(int position) { 
      return position; 
     } 

     @Override 
     public long getItemId(int position) { 
      return position; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      View layout = convertView; 
      if (convertView == null) 
      { 
       if (Globals.list_album.get(position).no_of_images == 1) { 
        layout = inflater.inflate(R.layout.single_image_adapter, null); 
       } 
       else if(Globals.list_album.get(position).no_of_images == 2) { 
        layout = inflater.inflate(R.layout.two_image_adapter, null); 
       } 
       else if(Globals.list_album.get(position).no_of_images == 3) { 
        layout = inflater.inflate(R.layout.three_image_adapter, null); 
       } 
       else if(Globals.list_album.get(position).no_of_images == 4) { 
        layout = inflater.inflate(R.layout.four_image_adapter, null); 
       } 
       else if(Globals.list_album.get(position).no_of_images == 5) { 
        layout = inflater.inflate(R.layout.five_image_adapter, null); 
       } 
      } 

      return layout; 
     } 

    } 

voglio caricare il layout in base al no di immagini in Globals.list_album in ogni posizione. Ma non sta funzionando correttamente. Non funziona per no_of_images = 5 e 2 poiché ho questi valori nell'elenco. Attualmente i miei valori per no_of_images sono 4,3,1,2 e 5. Quindi dovrebbe visualizzare i layout four_image_adapter, three_image_adapter, one_image_adapter, two_image_adapter e five_image_adapter. Ma visualizza four_image_adapter, three_image_adapter, one_image_adapter, four_image_adapter e three_image_adapter. Tutti i layout hanno immagini in base al numero di immagini. Qualcuno potrebbe dirmi cosa devo fare?

+0

fuori il suggerimento domanda: pls utilizzare interruttore –

+0

@SagarPilkhwal: Vuoi dire che invece di se altra cosa che dovrebbe utilizzare switch? –

+0

@SagarPilkhwal: Per favore, suggerisci qualcosa a riguardo? –

risposta

8

Poiché è necessario layout diverso per i diversi file, utilizzare sotto i metodi

getViewTypeCount() - restituisce informazioni Quanti tipi di file.

getItemViewType (int position) - restituisce informazioni che tipo di layout si dovrebbe utilizzare in base alla posizione

utilizzando getItemViewType è possibile definire il layout è necessario utilizzare.

Ti piace questa

public static final int TYPE_1 = 1; 
public static final int TYPE_2 = 2; 

public int getItemTypeCount(){ 
    return 5; 
} 

public int getItemType(int position){ 
    // Your if else code and return type (TYPE_1 to TYPE_5) 
} 

public View getView(int position, View convertView, ViewGroup parent){ 
    // Return the right kind of view based on getItemType(position) 

    int type = getItemType(position); 
    if(type == TYPE_1){ 
     // create (or reuse) TYPE_1 view 
    } else if() { 
    }...... 

    return myView; 

} 

campioni

http://android.amberfog.com/?p=296

http://www.survivingwithandroid.com/2014/08/android-listview-with-multiple-row.html

+0

Ehi grazie, ha funzionato !! :-) –

+0

una cosa da tenere a mente, int restituito da getItemViewType() deve essere compreso nell'intervallo 0 per getViewTypeCount - 1 altrimenti verrà generato IndexOutOfBound, come si potrebbe citare getItemTypeCount() per restituire 2 poiché ci saranno due visualizzazioni e definisci tipi come TYPE_1 = 1 e TYPE_1 = 2 quindi non funzionerà. Consulta http://stackoverflow.com/questions/2596547/arrayindexoutofboundsexception-with-custom-android-adapter-for-multiple-visions-in –

Problemi correlati