1 package net.sf.openrocket.android.util;
\r
4 * TODO - this isn't working.
\r
6 import java.util.ArrayList;
\r
7 import java.util.List;
\r
9 import android.os.Bundle;
\r
10 import android.widget.ExpandableListAdapter;
\r
11 import android.widget.ExpandableListView;
\r
13 public class PersistentExpandableListFragment extends ExpandableListFragment {
\r
14 private long[] expandedIds;
\r
17 public void onCreate(Bundle savedInstanceState) {
\r
18 AndroidLogWrapper.d(PersistentExpandableListFragment.class, "onCreate");
\r
19 super.onCreate(savedInstanceState);
\r
20 if ( savedInstanceState != null ) {
\r
21 expandedIds = savedInstanceState.getLongArray("ExpandedIds");
\r
26 public void onStop() {
\r
27 AndroidLogWrapper.d(PersistentExpandableListFragment.class, "onStop");
\r
29 expandedIds = getExpandedIds();
\r
33 public void onStart() {
\r
34 AndroidLogWrapper.d(PersistentExpandableListFragment.class, "onStart");
\r
36 if (this.expandedIds != null) {
\r
37 restoreExpandedState(expandedIds);
\r
42 public void onPause() {
\r
43 AndroidLogWrapper.d(PersistentExpandableListFragment.class, "onPause");
\r
45 expandedIds = getExpandedIds();
\r
50 public void onResume() {
\r
51 AndroidLogWrapper.d(PersistentExpandableListFragment.class, "onResume");
\r
53 if (this.expandedIds != null) {
\r
54 restoreExpandedState(expandedIds);
\r
59 public void onSaveInstanceState(Bundle outState) {
\r
60 super.onSaveInstanceState(outState);
\r
61 this.expandedIds = getExpandedIds();
\r
62 outState.putLongArray("ExpandedIds", this.expandedIds);
\r
67 protected void onStart() {
\r
69 if (this.expandedIds != null) {
\r
70 restoreExpandedState(expandedIds);
\r
75 protected void onStop() {
\r
77 expandedIds = getExpandedIds();
\r
81 protected void onSaveInstanceState(Bundle outState) {
\r
82 super.onSaveInstanceState(outState);
\r
83 this.expandedIds = getExpandedIds();
\r
84 outState.putLongArray("ExpandedIds", this.expandedIds);
\r
88 protected void onRestoreInstanceState(Bundle state) {
\r
89 super.onRestoreInstanceState(state);
\r
90 long[] expandedIds = state.getLongArray("ExpandedIds");
\r
91 if (expandedIds != null) {
\r
92 restoreExpandedState(expandedIds);
\r
98 private long[] getExpandedIds() {
\r
99 ExpandableListView list = getExpandableListView();
\r
100 ExpandableListAdapter adapter = getExpandableListAdapter();
\r
101 if (adapter != null) {
\r
102 int length = adapter.getGroupCount();
\r
103 ArrayList<Long> expandedIds = new ArrayList<Long>();
\r
104 for(int i=0; i < length; i++) {
\r
105 if(list.isGroupExpanded(i)) {
\r
106 expandedIds.add(adapter.getGroupId(i));
\r
109 return toLongArray(expandedIds);
\r
115 private void restoreExpandedState(long[] expandedIds) {
\r
116 this.expandedIds = expandedIds;
\r
117 if (expandedIds != null) {
\r
118 ExpandableListView list = getExpandableListView();
\r
119 ExpandableListAdapter adapter = getExpandableListAdapter();
\r
120 if (adapter != null) {
\r
121 for (int i=0; i<adapter.getGroupCount(); i++) {
\r
122 long id = adapter.getGroupId(i);
\r
123 if (inArray(expandedIds, id)) list.expandGroup(i);
\r
129 private static boolean inArray(long[] array, long element) {
\r
130 for (long l : array) {
\r
131 if (l == element) {
\r
138 private static long[] toLongArray(List<Long> list) {
\r
139 long[] ret = new long[list.size()];
\r
141 for (Long e : list)
\r
142 ret[i++] = e.longValue();
\r