I'm trying to program an Android interface which uses an expandable list on the side and a fragment on the other side so I can load different resources by clicking on the children of the expandable list. But unfortunately I cannot find any good tutorials about this list anywhere. Yes I've look in the API demos and I've made a normal list with a BaseExpandableListAdapter but still, understanding those list well it's kinda hard without a good tutorial, do you have any good one around or info I could check?
Create item list
List<ParentItem> itemList = new ArrayList<ParentItem>(); ParentItem parent1 = new ParentItem(); parent1.getChildItemList().add(new ChildItem()); parent1.getChildItemList().add(new ChildItem()); parent1.getChildItemList().add(new ChildItem()); ParentItem parent2 = new ParentItem(); parent2.getChildItemList().add(new ChildItem()); parent2.getChildItemList().add(new ChildItem()); parent2.getChildItemList().add(new ChildItem()); itemList.add(parent1); itemList.add(parent2); ExpandableListViewAdapter adapter = new ExpandableListViewAdapter(context, itemList);
Data Objects
public class ParentItem { private List<ChildItem> childItemList; public ParentItem() { childItemList = new ArrayList<ChildItem>(); } public List<ChildItem> getChildItemList() { return childItemList; } } public class ChildItem { // filll with your data }
Adapter
public class ExpandableListViewAdapter extends BaseExpandableListAdapter { private static final class ViewHolder { TextView textLabel; } private final List<ParentItem> itemList; private final LayoutInflater inflater; public ExpandableListViewAdapter(Context context, List<ParentItem> itemList) { this.inflater = LayoutInflater.from(context); this.itemList = itemList; } @Override public ChildItem getChild(int groupPosition, int childPosition) { return itemList.get(groupPosition).getChildItemList().get(childPosition); } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public int getChildrenCount(int groupPosition) { return itemList.get(groupPosition).getChildItemList().size(); } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, final ViewGroup parent) { View resultView = convertView; ViewHolder holder; if (resultView == null) { resultView = inflater.inflate(android.R.layout.test_list_item, null); //TODO change layout id holder = new ViewHolder(); holder.textLabel = (TextView) resultView.findViewById(android.R.id.title); //TODO change view id resultView.setTag(holder); } else { holder = (ViewHolder) resultView.getTag(); } final ChildItem item = getChild(groupPosition, childPosition); holder.textLabel.setText(item.toString()); return resultView; } @Override public ParentItem getGroup(int groupPosition) { return itemList.get(groupPosition); } @Override public int getGroupCount() { return itemList.size(); } @Override public long getGroupId(final int groupPosition) { return groupPosition; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View theConvertView, ViewGroup parent) { View resultView = theConvertView; ViewHolder holder; if (resultView == null) { resultView = inflater.inflate(android.R.layout.test_list_item, null); //TODO change layout id holder = new ViewHolder(); holder.textLabel = (TextView) resultView.findViewById(android.R.id.title); //TODO change view id resultView.setTag(holder); } else { holder = (ViewHolder) resultView.getTag(); } final ParentItem item = getGroup(groupPosition); holder.textLabel.setText(item.toString()); return resultView; } @Override public boolean hasStableIds() { return true; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } }
Gives you
============================== +Parent 1 ============================== -child 1.1 ============================== -child 1.2 ============================== -child 1.3 ============================== +Parent 2 ============================== -child 2.1 ============================== -child 2.2 ============================== -child 2.3 ==============================
you can find working example of the expandable list view by following links:
ExpandableListView
Expandable ListView in ANDROID
Android Expandable ListView simple Example in android.
for click on child, you can handle this way.
getExpandableListView().setOnChildClickListener(new OnChildClickListener() { public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { // your code... } });
Hope this will help you. Thanks..
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With