2013-07-30 21 views
6

Chcę zaimplementować niestandardowy adapter do rozwijanego ListView, który składa się z ImageView i 2 TextViews. Z powodzeniem zaimplementowałem Simple Expandable ListView with Array Adapter. Jakie zmiany należy wprowadzić w następujących dwóch klasach (pierwsza klasa to klasa adaptera, a druga to działanie do wyświetlenia rozszerzalnego listView), aby zaimplementować pożądany układ niestandardowy? Poniżej są klasy, które muszą być zmienione:Implementuj rozwijaną ListView przy użyciu niestandardowego adaptera

poniżej jest klasa adaptera:

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 

    } 

} 

poniżej jest mój TourCatActivity.java:

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; 
    } 

} 

Odpowiedz

5

Oto najlepszy przykład Expandable ListView z dostosowywania. Daj mi znać w przypadku jakichkolwiek trudności. Przypuszczam, że ExpandableBaseAdapter jest tym, czego potrzebujesz, aby zagłębić się w:

+0

W metodzie getChildView() klasy adaptera, gdzie jest zaimplementowane zdjęcie, ponieważ wszystkie elementy podrzędne zawierają ten sam obraz i chcę mieć inny obraz dla każdego dziecka, a ostatecznie , Muszę zaimplementować wygląd elementu imageView do elementu grupy. Element potomny zawiera właśnie tekst. – divyang7

+0

powrót do widoku getChildView(), możesz przywrócić dowolny widok (nadpisujesz również układ), aby wyświetlić wewnątrz wiersza podrzędnego, Zbierz tablicę Obrazów i ustaw na podstawie pozycji – Sameer

+0

Czy możesz to zakodować ... w grupie dla viewView() Metoda stanie się bardziej przejrzysta w ten sposób. Należy również powiedzieć, czy w miarę możliwości należy dokonać zmian w klasie Adapter, klasie MainActivity lub konstruktorze itd. – divyang7