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
65 private long[] getExpandedIds() {
\r
66 ExpandableListView list = getExpandableListView();
\r
67 ExpandableListAdapter adapter = getExpandableListAdapter();
\r
68 if (adapter != null) {
\r
69 int length = adapter.getGroupCount();
\r
70 ArrayList<Long> expandedIds = new ArrayList<Long>();
\r
71 for(int i=0; i < length; i++) {
\r
72 if(list.isGroupExpanded(i)) {
\r
73 expandedIds.add(adapter.getGroupId(i));
\r
76 return toLongArray(expandedIds);
\r
82 private void restoreExpandedState(long[] expandedIds) {
\r
83 this.expandedIds = expandedIds;
\r
84 if (expandedIds != null) {
\r
85 ExpandableListView list = getExpandableListView();
\r
86 ExpandableListAdapter adapter = getExpandableListAdapter();
\r
87 if (adapter != null) {
\r
88 for (int i=0; i<adapter.getGroupCount(); i++) {
\r
89 long id = adapter.getGroupId(i);
\r
90 if (inArray(expandedIds, id)) list.expandGroup(i);
\r
96 private static boolean inArray(long[] array, long element) {
\r
97 for (long l : array) {
\r
105 private static long[] toLongArray(List<Long> list) {
\r
106 long[] ret = new long[list.size()];
\r
108 for (Long e : list)
\r
109 ret[i++] = e.longValue();
\r