Implement an extensible ListView using a custom adapter

I want to implement a custom adapter for an Expandable ListView consisting of ImageView and 2 TextViews. I have successfully implemented Simple Expandable ListView with Array Adapter. What changes should be made in the following two classes (the first class is the Adapter class, and the second is the Activity to display the Expandable ListView) to implement the desired custom layout? The following are the classes that need to be changed:

The following is the adapter 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 } } 

Below is my 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; } } 
+6
source share
1 answer

Here is the best Expandable ListView with customization. Let me know in case of any difficulties. I assume the ExpandableBaseAdapter is what you need to deeply explore

+5
source

Source: https://habr.com/ru/post/950603/


All Articles