Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Activity {
- private int groupToExpand = 4, childToExpand = 3;
- protected void onCreate(Bundle savedInstance) {
- final ExpandableListView elv = (ExpandableListView) findViewById(R.id.elv);
- if (arrayList!= null && !arrayList.isEmpty()) {
- elv.setAdapter(new RootAdapter(this, arrayList);
- // this selects the correct group, but doesn't expand the child.
- elv.setSelectedChild(groupToExpand, childToExpand, true);
- elv.expandGroup(groupToExpand); // this works.
- }
- }
- }
- public class RootAdapter extends BaseExpandableListAdapter {
- private List<Objects> arrayList;
- private Context context;
- private LayoutInflater inflater;
- public RootAdapter(Context context, List<Objects> arrayList) {
- this.context = context;
- this.arrayList = arrayList;
- this.inflater = LayoutInflater.from(context);
- }
- @Override
- public Object getChild(int groupPosition, int childPosition) {
- final Objects parent = (Objects) getGroup(groupPosition);
- return parent.arrayList.get(childPosition);
- }
- @Override
- public long getChildId(int groupPosition, int childPosition) {
- return childPosition;
- }
- @Override
- public View getChildView(int groupPosition, int childPosition,
- boolean isLastChild, View convertView, ViewGroup parent) {
- final Objects o = (Objects) getChild(groupPosition, childPosition);
- CustomExpandableListView elv = (CustomExpandableListView) convertView;
- ChildViewHolder holder;
- if (elv == null) {
- holder = new ChildViewHolder();
- elv = new CustomExpandableListView(context);
- elv.setGroupIndicator(null);
- elv.setDivider(null);
- elv.setCacheColorHint(Color.parseColor("#00000000"));
- elv.setChildDivider(null);
- elv.setChildIndicator(null);
- elv.setScrollingCacheEnabled(false);
- elv.setAnimationCacheEnabled(false);
- holder.cListView = elv;
- elv.setTag(holder);
- } else {
- holder = (ChildViewHolder) elv.getTag();
- }
- final ParentAdapter adapter = new ParentAdapter(context, o);
- holder.cListView.setAdapter(adapter);
- return elv;
- }
- private static class ChildViewHolder {
- CustomExpandableListView cListView;
- }
- @Override
- public int getChildrenCount(int groupPosition) {
- final Objects parent = (Objects) getGroup(groupPosition);
- return parent.arrayList.size();
- }
- @Override
- public Object getGroup(int groupPosition) {
- return arrayList.get(groupPosition);
- }
- @Override
- public int getGroupCount() {
- return arrayList.size();
- }
- @Override
- public long getGroupId(int groupPosition) {
- return groupPosition;
- }
- @Override
- public View getGroupView(int groupPosition, boolean isExpanded,
- View convertView, ViewGroup parent) {
- View layout = convertView;
- GroupViewHolder holder;
- final Objects o = (Objects) getGroup(groupPosition);
- if (layout == null) {
- layout = inflater.inflate(R.layout.item_to_inflate, parent, false);
- holder = new GroupViewHolder();
- holder.title = (TextView) layout.findViewById(R.id.title);
- holder.image = (ImageView) layout.findViewById(R.id.image);
- layout.setTag(holder);
- } else {
- holder = (GroupViewHolder) layout.getTag();
- }
- holder.title.setText(o.title.trim());
- return layout;
- }
- @Override
- public boolean hasStableIds() {
- return true;
- }
- @Override
- public boolean isChildSelectable(int groupPosition, int childPosition) {
- return true;
- }
- private static class GroupViewHolder {
- TextView title;
- ImageView image;
- }
- public class CustomExpandableListView extends ExpandableListView {
- public CustomExpandableListView(Context context) {
- super(context);
- }
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- heightMeasureSpec = MeasureSpec.makeMeasureSpec(2000, MeasureSpec.AT_MOST);
- super.onMeasure(widthMeasureSpec, heightMeasureSpec);
- }
- }
- }
- public class ParentAdapter extends BaseExpandableListAdapter {
- private Objects child;
- private LayoutInflater inflater;
- public ParentAdapter(Context context, Objects child) {
- this.child = child;
- this.inflater = LayoutInflater.from(context);
- }
- @Override
- public Object getChild(int groupPosition, int childPosition) {
- return child.arrayList.get(childPosition);
- }
- @Override
- public long getChildId(int groupPosition, int childPosition) {
- return childPosition;
- }
- @Override
- public View getChildView(int groupPosition, int childPosition,
- boolean isLastChild, View convertView, ViewGroup parent) {
- View layout = convertView;
- final Objects o = (Objects) getChild(0, childPosition);
- ChildViewHolder holder;
- if (layout == null) {
- layout = inflater.inflate(R.layout.item_to_inflate, parent, false);
- holder = new ChildViewHolder();
- holder.title = (TextView) layout.findViewById(R.id.title);
- layout.setTag(holder);
- } else {
- holder = (ChildViewHolder) layout.getTag();
- }
- holder.title.setText(o.title.trim());
- return layout;
- }
- @Override
- public int getChildrenCount(int groupPosition) {
- return child.arrayList.size();
- }
- @Override
- public Object getGroup(int groupPosition) {
- return child;
- }
- @Override
- public int getGroupCount() {
- return 1;
- }
- @Override
- public long getGroupId(int groupPosition) {
- return groupPosition;
- }
- @Override
- public View getGroupView(int groupPosition, boolean isExpanded,
- View convertView, ViewGroup parent) {
- View layout = convertView;
- GroupViewHolder holder;
- if (layout == null) {
- layout = inflater.inflate(R.layout.item_to_inflate, parent, false);
- holder = new GroupViewHolder();
- holder.image = (ImageView) layout.findViewById(R.id.image);
- holder.title = (TextView) layout.findViewById(R.id.title);
- layout.setTag(holder);
- } else {
- holder = (GroupViewHolder) layout.getTag();
- }
- holder.title.setText(o.title.trim());
- return layout;
- }
- @Override
- public boolean hasStableIds() {
- return true;
- }
- @Override
- public boolean isChildSelectable(int groupPosition, int childPosition) {
- return true;
- }
- private static class GroupViewHolder {
- TextView title;
- ImageView image;
- }
- private static class ChildViewHolder {
- TextView title;
- }
- }
- if (groupToExpand == groupPosition && childToExpand == childPosition) {
- elv.expandGroup(childToExpand);
- }
- if (arrayList!= null && !arrayList.isEmpty()) {
- RootAdapter adapter = new RootAdapter(this, arrayList);
- elv.setAdapter(adapter);
- // this selects the correct group, but doesn't expand the child.
- elv.setSelectedChild(groupToExpand, childToExpand, true);
- elv.expandGroup(groupToExpand); // this works.
- adapter.groupToExpand = groupToExpand;
- adapter.childToExpand = childToExpand;
- adapter.notifyDataSetChanged();
- }
- public class RootAdapter extends BaseExpandableListAdapter {
- private Object root;
- private final LayoutInflater inflater;
- public class Entry {
- public final CustExpListview cls;
- public final SecondLevelAdapter sadpt;
- public Entry(CustExpListview cls, SecondLevelAdapter sadpt) {
- this.cls = cls;
- this.sadpt = sadpt;
- }
- }
- public Entry[] lsfirst;
- // you can change the constructor depending on which listeners you wan't to use.
- public RootAdapter(Context context, Object root, ExpandableListView.OnGroupClickListener grpLst,
- ExpandableListView.OnChildClickListener childLst, ExpandableListView.OnGroupExpandListener grpExpLst) {
- this.root = root;
- this.inflater = LayoutInflater.from(context);
- lsfirst = new Entry[root.children.size()];
- for (int i = 0; i < root.children.size(); i++) {
- final CustExpListview celv = new CustExpListview(context);
- SecondLevelAdapter adp = new SecondLevelAdapter(root.children.get(i));
- celv.setAdapter(adp);
- celv.setGroupIndicator(null);
- celv.setOnChildClickListener(childLst);
- celv.setOnGroupClickListener(grpLst);
- celv.setOnGroupExpandListener(grpExpLst);
- lsfirst[i] = new Entry(celv, adp);
- }
- }
- @Override
- public Object getChild(int groupPosition, int childPosition) {
- return childPosition;
- }
- @Override
- public long getChildId(int groupPosition, int childPosition) {
- return childPosition;
- }
- @Override
- public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
- View convertView, ViewGroup parent) {
- // second level list
- return lsfirst[groupPosition].cls;
- }
- @Override
- public int getChildrenCount(int groupPosition) {
- return 1;
- }
- @Override
- public Object getGroup(int groupPosition) {
- return root.children.get(groupPosition);
- }
- @Override
- public int getGroupCount() {
- return root.children.size();
- }
- @Override
- public long getGroupId(int groupPosition) {
- return groupPosition;
- }
- @Override
- public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
- ViewGroup parent) {
- // first level
- View layout = convertView;
- GroupViewHolder holder;
- final Object item = (Object) getGroup(groupPosition);
- if (layout == null) {
- layout = inflater.inflate(R.layout.item_root, parent, false);
- holder = new GroupViewHolder();
- holder.title = (TextView) layout.findViewById(R.id.itemRootTitle);
- layout.setTag(holder);
- } else {
- holder = (GroupViewHolder) layout.getTag();
- }
- holder.title.setText(item.title.trim());
- return layout;
- }
- private static class GroupViewHolder {
- TextView title;
- }
- @Override
- public boolean hasStableIds() {
- return true;
- }
- @Override
- public boolean isChildSelectable(int groupPosition, int childPosition) {
- return true;
- }
- }
- public class CustExpListview extends ExpandableListView {
- public CustExpListview(Context context) {
- super(context);
- }
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- // the value (2000) should not be fixed and be calculated
- // as follows: cell_height x root_items_count x root_items_children_count
- heightMeasureSpec = MeasureSpec.makeMeasureSpec(2000, MeasureSpec.AT_MOST);
- super.onMeasure(widthMeasureSpec, heightMeasureSpec);
- }
- @Override
- protected void onDetachedFromWindow() {
- try {
- super.onDetachedFromWindow();
- } catch (IllegalArgumentException e) {
- // TODO: Workaround for http://code.google.com/p/android/issues/detail?id=22751
- }
- }
- }
- public class SecondLevelAdapter extends BaseExpandableListAdapter {
- public Object child;
- public SecondLevelAdapter(Object child) {
- this.child = child;
- }
- @Override
- public Object getChild(int groupPosition, int childPosition) {
- return child.children.get(groupPosition).children.get(childPosition);
- }
- @Override
- public long getChildId(int groupPosition, int childPosition) {
- return childPosition;
- }
- // third level
- @Override
- public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
- View convertView, ViewGroup parent) {
- View layout = convertView;
- final Object item = (Object) getChild(groupPosition, childPosition);
- ChildViewHolder holder;
- if (layout == null) {
- layout = inflater.inflate(R.layout.item_child, parent, false);
- holder = new ChildViewHolder();
- holder.title = (TextView) layout.findViewById(R.id.itemChildTitle);
- layout.setTag(holder);
- } else {
- holder = (ChildViewHolder) layout.getTag();
- }
- holder.title.setText(item.title.trim());
- return layout;
- }
- @Override
- public int getChildrenCount(int groupPosition) {
- return child.children.get(groupPosition).children.size();
- }
- @Override
- public Object getGroup(int groupPosition) {
- return child.children.get(groupPosition);
- }
- @Override
- public int getGroupCount() {
- return child.children.size();
- }
- @Override
- public long getGroupId(int groupPosition) {
- return groupPosition;
- }
- // Second level
- @Override
- public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
- ViewGroup parent) {
- View layout = convertView;
- ViewHolder holder;
- final Object item = (Object) getGroup(groupPosition);
- if (layout == null) {
- layout = inflater.inflate(R.layout.item_parent, parent, false);
- holder = new ViewHolder();
- holder.title = (TextView) layout.findViewById(R.id.itemParentTitle);
- layout.setTag(holder);
- } else {
- holder = (ViewHolder) layout.getTag();
- }
- holder.title.setText(item.title.trim());
- return layout;
- }
- @Override
- public void registerDataSetObserver(DataSetObserver observer) {
- super.registerDataSetObserver(observer);
- }
- @Override
- public void unregisterDataSetObserver(DataSetObserver observer) {
- Log.d("SecondLevelAdapter", "Unregistering observer");
- if (observer != null) {
- super.unregisterDataSetObserver(observer);
- }
- }
- @Override
- public boolean hasStableIds() {
- return true;
- }
- @Override
- public boolean isChildSelectable(int groupPosition, int childPosition) {
- return true;
- }
- private static class ViewHolder {
- TextView title;
- }
- private static class ChildViewHolder {
- TextView title;
- }
- }
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- final List<Object> objects = yourItems;
- if (!objects.isEmpty()) {
- final ExpandableListView elv = (ExpandableListView) findViewById(R.id.yourExpandableListView);
- /* Item click listeners below */
- // First level items in the ExpandableListView
- elv.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
- @Override
- public boolean onGroupClick(ExpandableListView eListView, View view, int groupPosition,
- long id) {
- // TODO: whatever you need
- return false /* or true depending on what you need */;
- }
- });
- // Second level items in the ExpandableListView
- ExpandableListView.OnGroupClickListener grpLst = new ExpandableListView.OnGroupClickListener() {
- @Override
- public boolean onGroupClick(ExpandableListView eListView, View view, int groupPosition,
- long id) {
- // TODO: whatever you need
- return false /* or true depending on what you need */;
- }
- };
- // Third (and last) level items in the ExpandableListView
- ExpandableListView.OnChildClickListener childLst = new ExpandableListView.OnChildClickListener() {
- @Override
- public boolean onChildClick(ExpandableListView eListView, View view, int groupPosition,
- int childPosition, long id) {
- // TODO: whatever you need
- return false /* or true depending on what you need */;
- }
- };
- ExpandableListView.OnGroupExpandListener grpExpLst = new ExpandableListView.OnGroupExpandListener() {
- @Override
- public void onGroupExpand(int groupPosition) {
- /* this one is not required of course, you can delete it from the RootAdapter Constructor
- * it is just an example as to how to implement Listeners on the second level items */
- }
- };
- final RootAdapter adapter = new RootAdapter(this, objects, grpLst, childLst, grpExpLst);
- elv.setAdapter(adapter);
- }
- }
- public class Object {
- public String title; // use getters and setters instead
- public List<Object> children; // same as above
- public Object() {
- children = new ArrayList<Object>();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement