2014-09-09 15 views
7

Hallo unten ist meine Klasse für baseadapter, aber es funktioniert nicht richtig:Listview mit mehreren Arten von Zeilen Layout - BaseAdapter funktioniert nicht richtig 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; 
     } 

    } 

Ich möchte nach dem Layout laden, um die nicht von Bildern in Globals.list_album zu jeder Position. Aber es funktioniert nicht richtig. Es funktioniert nicht für no_of_images = 5 und 2, da ich solche Werte in der Liste habe. Momentan sind meine Werte für no_of_images 4,3,1,2 und 5. Es sollten also die Layouts four_image_adapter, three_image_adapter, one_image_adapter, two_image_adapter und five_image_adapter angezeigt werden. Aber es zeigt vier Bilder, drei Bilder, ein Bild, vier Bilder und drei Bilder. Alle Layouts haben Bildansichten entsprechend der Anzahl der Bilder. Will mir bitte jemand sagen, was ich zu tun habe?

+0

vor der Frage Vorschlag: pls verwenden Schalter –

+0

@SagarPilkhwal: Sie meinen, statt, wenn sonst sollte ich Schalter benutzen? –

+0

@SagarPilkhwal: Würden Sie bitte etwas dazu vorschlagen? –

Antwort

8

Da Sie verschiedene Layouts für unterschiedliche Zeilen benötigen, verwenden Sie folgenden Methoden

getViewTypeCount() - gibt Informationen, wie viele Arten von Zeilen.

getItemViewType (int position) - liefert Informationen, die Layout-Typ Sie auf Position basierend verwenden sollten

getItemViewType verwenden Sie das Layout definieren können Sie verwenden müssen.

gefällt das

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; 

} 

Proben

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

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

+0

Hey danke, es hat geklappt !! :-) –

+0

eine Sache zu beachten, muss Int von getItemViewType() zurückgegeben werden muss im Bereich 0 bis getViewTypeCount - 1 andernfalls wird IndexOutOfBound werfen, wie man getItemTypeCount() sagen kann, um 2 zurückzugeben, da es zwei Ansichten und gibt Definieren Sie Typen als TYPE_1 = 1 und TYPE_1 = 2, dann wird es nicht funktionieren. Siehe http://stackoverflow.com/questions/2596547/arrayindexoutofboundexception-with-custom-android-adapter-for-multiple-views-in –