2013-07-30 36 views
6

Tôi muốn triển khai bộ điều hợp tùy chỉnh cho ListView có thể mở rộng bao gồm ImageView và 2 TextViews. Tôi đã triển khai thành công ListView mở rộng đơn giản với Array Adapter. Những thay đổi nào phải được thực hiện trong hai lớp sau (lớp đầu tiên là lớp Adapter và thứ hai là Activity để hiển thị ListView mở rộng) để triển khai Custom Layout mong muốn? Dưới đây là lớp học mà cần phải được thay đổi:Triển khai ListView có thể mở rộng bằng cách sử dụng Bộ điều hợp tùy chỉnh

Dưới đây là Adaptor Class:

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 

    } 

} 

Dưới đây là TourCatActivity.java tôi:

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

} 

Trả lời

5

Dưới đây là ví dụ tốt nhất của Expandable ListView với Customization. Hãy cho tôi biết trong trường hợp có bất kỳ khó khăn nào. Tôi đoán ExpandableBaseAdapter là thứ bạn cần xem sâu

+0

Trong phương thức getChildView() của lớp bộ điều hợp, hình ảnh đang được triển khai ở đâu, vì tất cả các con chứa cùng một hình ảnh, và tôi muốn có hình ảnh khác nhau cho mỗi đứa trẻ , Tôi phải thực hiện giao diện của imageView cho mục nhóm thực sự..mục con chỉ chứa textview. – divyang7

+0

getChildView() return là view, bạn có thể trả về bất kỳ view nào (bạn cũng thổi phồng layout) để hiển thị bên trong hàng con, lấy một mảng của Image và thiết lập trên cơ sở của vị trí – Sameer

+0

Bạn có thể mã nó ... trong groupView() phương pháp, nó sẽ trở nên rõ ràng hơn theo cách đó. Cũng cho biết nếu có thay đổi phải được thực hiện trong lớp Adapter, MainActivity lớp hoặc constructor vv nếu có thể. – divyang7

Các vấn đề liên quan