1 package net.sf.openrocket.android.util;
\r
3 import java.util.ArrayList;
\r
4 import java.util.List;
\r
6 import android.content.Context;
\r
7 import android.os.Bundle;
\r
8 import android.os.Parcelable;
\r
9 import android.util.AttributeSet;
\r
10 import android.widget.ExpandableListAdapter;
\r
11 import android.widget.ExpandableListView;
\r
13 public class PersistentExpandableListView extends ExpandableListView {
\r
15 public PersistentExpandableListView(Context context, AttributeSet attrs,
\r
17 super(context, attrs, defStyle);
\r
20 public PersistentExpandableListView(Context context, AttributeSet attrs) {
\r
21 super(context, attrs);
\r
24 public PersistentExpandableListView(Context context) {
\r
29 public Parcelable onSaveInstanceState() {
\r
30 Bundle b = new Bundle();
\r
31 long[] expandedIds = getExpandedIds();
\r
32 b.putLongArray("ExpandedIds", expandedIds);
\r
37 public void onRestoreInstanceState(Parcelable state) {
\r
38 Bundle b = (Bundle) state;
\r
39 long[] expandedIds = b.getLongArray("ExpandedIds");
\r
40 restoreExpandedState(expandedIds);
\r
43 private long[] getExpandedIds() {
\r
44 ExpandableListAdapter adapter = getExpandableListAdapter();
\r
45 if (adapter != null) {
\r
46 int length = adapter.getGroupCount();
\r
47 ArrayList<Long> expandedIds = new ArrayList<Long>();
\r
48 for(int i=0; i < length; i++) {
\r
49 if(this.isGroupExpanded(i)) {
\r
50 expandedIds.add(adapter.getGroupId(i));
\r
53 return toLongArray(expandedIds);
\r
59 private static long[] toLongArray(List<Long> list) {
\r
60 long[] ret = new long[list.size()];
\r
62 for (Long e : list)
\r
63 ret[i++] = e.longValue();
\r
67 private void restoreExpandedState(long[] expandedIds) {
\r
68 if (expandedIds != null) {
\r
69 ExpandableListAdapter adapter = getExpandableListAdapter();
\r
70 if (adapter != null) {
\r
71 for (int i=0; i<adapter.getGroupCount(); i++) {
\r
72 long id = adapter.getGroupId(i);
\r
73 if (inArray(expandedIds, id)) this.expandGroup(i);
\r
79 private static boolean inArray(long[] array, long element) {
\r
80 for (long l : array) {
\r