2013-07-30 15 views
6

Ich möchte einen benutzerdefinierten Adapter für erweiterbare ListView, die aus einem ImageView und 2 TextViews bestehen implementieren. Ich habe erfolgreich die einfache erweiterbare ListView mit Array-Adapter implementiert. Welche Änderungen müssen in den folgenden zwei Klassen (erste Klasse ist die Adapterklasse und zweitens ist die Aktivität zur Anzeige der erweiterbaren ListView) vorgenommen werden, um das gewünschte benutzerdefinierte Layout zu implementieren? Im Folgenden sind Klassen, die geändert werden müssen:Implementieren erweiterbare ListView mit benutzerdefinierten Adapter

Unten sind die Adapter Klasse:

package com.example.travelplanner; 

import java.util.List; 
import java.util.Map; 

import android.R.string; 
import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.sax.StartElementListener; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.BaseExpandableListAdapter; 
import android.widget.Button; 
import android.widget.ExpandableListView; 
import android.widget.TextView; 

public class ExpandableListAdapter extends BaseExpandableListAdapter implements OnClickListener{ 

    private Activity context; 
    private Map<String, List<String>> itemcollections; 
    private List<String> item; 
    TextView childtv; 
    Button btn_cat_explore; 
    public ExpandableListAdapter(Activity context, List<String> item_names, Map<String, List<String>> collections){ 
     this.context = context; 
     this.item = item_names; 
     this.itemcollections = collections; 
    } 
    @Override 
    public Object getChild(int groupposition, int childposition) { 
     // TODO Auto-generated method stub 
     return itemcollections.get(item.get(groupposition)).get(childposition); 
    } 

    @Override 
    public long getChildId(int groupposition, int childposition) { 
     // TODO Auto-generated method stub 
     return childposition; 
    } 

    @Override 
    public View getChildView(int groupposition, int childpostion, boolean isLastchild, View convertview, 
      ViewGroup parent) { 
     // TODO Auto-generated method stub 
     final String childitem = (String) getChild(groupposition, childpostion); 
     LayoutInflater inflater = context.getLayoutInflater(); 
     if(convertview==null){ 
      convertview = inflater.inflate(R.layout.child_item, null); 
     } 
     childtv = (TextView)convertview.findViewById(R.id.child_text); 
     childtv.setText(childitem); 
     return convertview; 
    } 

    @Override 
    public int getChildrenCount(int groupposition) { 
     // TODO Auto-generated method stub 
     return itemcollections.get(item.get(groupposition)).size(); 
    } 

    @Override 
    public Object getGroup(int groupPosition) { 
     // TODO Auto-generated method stub 
     return item.get(groupPosition); 
    } 

    @Override 
    public int getGroupCount() { 
     // TODO Auto-generated method stub 
     return item.size(); 
    } 

    @Override 
    public long getGroupId(int groupPosition) { 
     // TODO Auto-generated method stub 
     return groupPosition; 
    } 

    @Override 
    public View getGroupView(int groupPosition, boolean isExpanded, 
      View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     String itemname = (String) getGroup(groupPosition); 
     if(convertView==null){ 
      LayoutInflater groupinflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = groupinflater.inflate(R.layout.group_item, null); 
     } 
     return convertView; 
    } 

    @Override 
    public boolean hasStableIds() { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    @Override 
    public boolean isChildSelectable(int groupPosition, int childPosition) { 
     // TODO Auto-generated method stub 
     return false; 
    } 
    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 

    } 

} 

unten meine TourCatActivity.java ist:

package com.example.travelplanner; 

import java.util.ArrayList; 
import java.util.LinkedHashMap; 
import java.util.List; 
import java.util.Map; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.view.View; 
import android.widget.ExpandableListView; 
import android.widget.ExpandableListView.OnChildClickListener; 
import android.widget.TabHost; 
import android.widget.TabHost.TabSpec; 

public class TourCatActivity extends Activity { 

    List<String> groupList; 
    List<String> childList; 
    Map<String, List<String>> catcollection; 
    ExpandableListView expListView; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_tour_cat); 
     //Tab view 
     TabHost tabHost=(TabHost)findViewById(R.id.tabhost); 
     tabHost.setup(); 

     TabSpec spec1=tabHost.newTabSpec("Tab 1"); 
     spec1.setContent(R.id.tab1); 
     spec1.setIndicator("Category"); 

     TabSpec spec2=tabHost.newTabSpec("Theme"); 
     spec2.setIndicator("Theme tours"); 
     spec2.setContent(R.id.tab2); 

     tabHost.addTab(spec1); 
     tabHost.addTab(spec2); 

     createGroupList(); 

     createCollection(); 
     expListView = (ExpandableListView) findViewById(R.id.expandableListView1); 
     final ExpandableListAdapter expListAdapter = new ExpandableListAdapter(
       this, groupList, catcollection); 
     expListView.setAdapter(expListAdapter); 
     expListView.setOnChildClickListener(new OnChildClickListener() { 

      @Override 
      public boolean onChildClick(ExpandableListView parent, View v, 
        int groupPosition, int childPosition, long id) { 
       // TODO Auto-generated method stub 
       return false; 
      } 
     }); 
    } 
     private void createGroupList() { 
      groupList = new ArrayList<String>(); 
      groupList.add("Rajasthan"); 
      groupList.add("Golden Triangle"); 
      groupList.add("Luxury Trains"); 
      groupList.add("Heritage Tours"); 
      groupList.add("Cultural Tours"); 
      groupList.add("Beyond India Tours"); 
     } 

     private void createCollection() { 
      // preparing category collection(child) 
      String[] hpModels = { "HP Pavilion G6-2014TX", "ProBook HP 4540", 
        "HP Envy 4-1025TX" }; 
      String[] hclModels = { "HCL S2101", "HCL L2102", "HCL V2002" }; 
      String[] lenovoModels = { "IdeaPad Z Series", "Essential G Series", 
        "ThinkPad X Series", "Ideapad Z Series" }; 
      String[] sonyModels = { "VAIO E Series", "VAIO Z Series", 
        "VAIO S Series", "VAIO YB Series" }; 
      String[] dellModels = { "Inspiron", "Vostro", "XPS" }; 
      String[] samsungModels = { "NP Series", "Series 5", "SF Series" }; 

      catcollection = new LinkedHashMap<String, List<String>>(); 

      for (String laptop : groupList) { 
       if (laptop.equals("HP")) { 
        loadChild(hpModels); 
       } else if (laptop.equals("Dell")) 
        loadChild(dellModels); 
       else if (laptop.equals("Sony")) 
        loadChild(sonyModels); 
       else if (laptop.equals("HCL")) 
        loadChild(hclModels); 
       else if (laptop.equals("Samsung")) 
        loadChild(samsungModels); 
       else 
        loadChild(lenovoModels); 

       catcollection.put(laptop, childList); 
      } 
     } 

     private void loadChild(String[] laptopModels) { 
      childList = new ArrayList<String>(); 
      for (String model : laptopModels) 
       childList.add(model); 
     } 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.tour_cat, menu); 
     return true; 
    } 

} 

Antwort

5

Hier ist das beste Beispiel für Expandable ListView mit Customization. Lass es mich wissen, falls es Schwierigkeiten gibt. Ich denke, ExpandableBaseAdapter ist die Sache, die Sie tief schauen müssen

+0

In der Methode getChildView() der Adapterklasse, wo Bild implementiert wird, weil alle Kind das gleiche Bild enthalten, und ich möchte für jedes Kind und schließlich ein anderes Bild haben Ich muss das Aussehen von imageView tatsächlich auf das Gruppenobjekt anwenden. Das untergeordnete Element enthält nur die Textansicht. – divyang7

+0

getChildView() Rückkehr ist Ansicht, Sie können jede Ansicht (Sie ein Layout auch aufblasen), um innerhalb der untergeordneten Zeile anzeigen, nehmen Sie ein Array von Bild und setzen Sie auf der Basis der Position – Sameer

+0

Können Sie es codieren ... in der for groupView() Methode, wird es so klarer werden. Geben Sie auch an, ob Änderungen in der Adapter-Klasse, der MainActivity-Klasse oder dem Konstruktor usw. vorgenommen werden müssen, sofern dies möglich ist. – divyang7

Verwandte Themen