1 package net.sf.openrocket.android.motor;
\r
3 import java.util.ArrayList;
\r
4 import java.util.List;
\r
6 import android.app.ExpandableListActivity;
\r
7 import android.os.Bundle;
\r
8 import android.widget.ExpandableListAdapter;
\r
9 import android.widget.ExpandableListView;
\r
11 public class PersistentExpandableListActivity extends ExpandableListActivity {
\r
12 private long[] expandedIds;
\r
15 protected void onStart() {
\r
17 if (this.expandedIds != null) {
\r
18 restoreExpandedState(expandedIds);
\r
23 protected void onStop() {
\r
25 expandedIds = getExpandedIds();
\r
29 protected void onSaveInstanceState(Bundle outState) {
\r
30 super.onSaveInstanceState(outState);
\r
31 this.expandedIds = getExpandedIds();
\r
32 outState.putLongArray("ExpandedIds", this.expandedIds);
\r
36 protected void onRestoreInstanceState(Bundle state) {
\r
37 super.onRestoreInstanceState(state);
\r
38 long[] expandedIds = state.getLongArray("ExpandedIds");
\r
39 if (expandedIds != null) {
\r
40 restoreExpandedState(expandedIds);
\r
44 private long[] getExpandedIds() {
\r
45 ExpandableListView list = getExpandableListView();
\r
46 ExpandableListAdapter adapter = getExpandableListAdapter();
\r
47 if (adapter != null) {
\r
48 int length = adapter.getGroupCount();
\r
49 ArrayList<Long> expandedIds = new ArrayList<Long>();
\r
50 for(int i=0; i < length; i++) {
\r
51 if(list.isGroupExpanded(i)) {
\r
52 expandedIds.add(adapter.getGroupId(i));
\r
55 return toLongArray(expandedIds);
\r
61 private void restoreExpandedState(long[] expandedIds) {
\r
62 this.expandedIds = expandedIds;
\r
63 if (expandedIds != null) {
\r
64 ExpandableListView list = getExpandableListView();
\r
65 ExpandableListAdapter adapter = getExpandableListAdapter();
\r
66 if (adapter != null) {
\r
67 for (int i=0; i<adapter.getGroupCount(); i++) {
\r
68 long id = adapter.getGroupId(i);
\r
69 if (inArray(expandedIds, id)) list.expandGroup(i);
\r
75 private static boolean inArray(long[] array, long element) {
\r
76 for (long l : array) {
\r
84 private static long[] toLongArray(List<Long> list) {
\r
85 long[] ret = new long[list.size()];
\r
87 for (Long e : list)
\r
88 ret[i++] = e.longValue();
\r