Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android ExpandableListView - Looking for a tutorial [closed]

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?

like image 491
DeX03 Avatar asked Mar 22 '12 14:03

DeX03


2 Answers

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 ============================== 
like image 54
Dmytro Danylyk Avatar answered Oct 08 '22 15:10

Dmytro Danylyk


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..

like image 36
Never Quit Avatar answered Oct 08 '22 14:10

Never Quit