From b880eb426093d51c77d83aca0af1f211a1598170 Mon Sep 17 00:00:00 2001 From: Dianne Hackborn Date: Thu, 12 Aug 2010 16:23:45 -0700 Subject: [PATCH] Update API demos to use new Fragment features. In particular, use the new argument Bundle for passing runtime data to fragments. Simplifies the code some. Change-Id: I248bfa0bf94b1599926038174baa4c7387ed8ba1 --- .../android/apis/app/FragmentDialog.java | 70 +++++++++---------- .../android/apis/app/FragmentStack.java | 36 +++++----- 2 files changed, 55 insertions(+), 51 deletions(-) diff --git a/samples/ApiDemos/src/com/example/android/apis/app/FragmentDialog.java b/samples/ApiDemos/src/com/example/android/apis/app/FragmentDialog.java index cbca4690b..055bb7070 100644 --- a/samples/ApiDemos/src/com/example/android/apis/app/FragmentDialog.java +++ b/samples/ApiDemos/src/com/example/android/apis/app/FragmentDialog.java @@ -65,35 +65,22 @@ public class FragmentDialog extends Activity { void showDialog() { mStackLevel++; - DialogFragment newFragment = new MyDialogFragment(mStackLevel); + + // DialogFragment.show() will take care of adding the fragment + // in a transaction. We also want to remove any currently showing + // dialog, so make our own transaction and take care of that here. FragmentTransaction ft = openFragmentTransaction(); Fragment prev = findFragmentByTag("dialog"); if (prev != null) { ft.remove(prev); } ft.addToBackStack(null); + + // Create and show the dialog. + DialogFragment newFragment = MyDialogFragment.newInstance(mStackLevel); newFragment.show(this, ft, "dialog"); } - static int getStyleForNum(int num) { - switch ((num-1)%6) { - case 1: return DialogFragment.STYLE_NO_TITLE; - case 2: return DialogFragment.STYLE_NO_FRAME; - case 3: return DialogFragment.STYLE_NO_INPUT; - case 4: return DialogFragment.STYLE_NORMAL; - case 5: return DialogFragment.STYLE_NORMAL; - } - return DialogFragment.STYLE_NORMAL; - } - - static int getThemeForNum(int num) { - switch ((num-1)%6) { - case 4: return android.R.style.Theme_Light; - case 5: return android.R.style.Theme; - } - return 0; - } - static String getNameForNum(int num) { switch ((num-1)%6) { case 1: return "STYLE_NO_TITLE"; @@ -109,27 +96,40 @@ public class FragmentDialog extends Activity { public static class MyDialogFragment extends DialogFragment { int mNum; - public MyDialogFragment() { - mNum = -1; - } + /** + * Create a new instance of MyDialogFragment, providing "num" + * as an argument. + */ + static MyDialogFragment newInstance(int num) { + MyDialogFragment f = new MyDialogFragment(); - public MyDialogFragment(int num) { - super(getStyleForNum(num), getThemeForNum(num)); - mNum = num; - } + // Supply num input as an argument. + Bundle args = new Bundle(); + args.putInt("num", num); + f.setArguments(args); + return f; + } + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - if (savedInstanceState != null) { - mNum = savedInstanceState.getInt("num"); - } - } + mNum = getArguments().getInt("num"); - @Override - public void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - outState.putInt("num", mNum); + // Pick a style based on the num. + int style = DialogFragment.STYLE_NORMAL, theme = 0; + switch ((mNum-1)%6) { + case 1: style = DialogFragment.STYLE_NO_TITLE; break; + case 2: style = DialogFragment.STYLE_NO_FRAME; break; + case 3: style = DialogFragment.STYLE_NO_INPUT; break; + case 4: style = DialogFragment.STYLE_NORMAL; break; + case 5: style = DialogFragment.STYLE_NORMAL; break; + } + switch ((mNum-1)%6) { + case 4: theme = android.R.style.Theme_Light; break; + case 5: theme = android.R.style.Theme; break; + } + setStyle(style, theme); } @Override diff --git a/samples/ApiDemos/src/com/example/android/apis/app/FragmentStack.java b/samples/ApiDemos/src/com/example/android/apis/app/FragmentStack.java index 6440cbd48..cdb1c4ecc 100644 --- a/samples/ApiDemos/src/com/example/android/apis/app/FragmentStack.java +++ b/samples/ApiDemos/src/com/example/android/apis/app/FragmentStack.java @@ -47,7 +47,7 @@ public class FragmentStack extends Activity { if (savedInstanceState == null) { // Do first time initialization -- add initial fragment. - Fragment newFragment = new CountingFragment(mStackLevel); + Fragment newFragment = CountingFragment.newInstance(mStackLevel); FragmentTransaction ft = openFragmentTransaction(); ft.add(R.id.simple_fragment, newFragment).commit(); } else { @@ -63,7 +63,12 @@ public class FragmentStack extends Activity { void addFragmentToStack() { mStackLevel++; - Fragment newFragment = new CountingFragment(mStackLevel); + + // Instantiate a new fragment. + Fragment newFragment = CountingFragment.newInstance(mStackLevel); + + // Add the fragment to the activity, pushing this transaction + // on to the back stack. FragmentTransaction ft = openFragmentTransaction(); ft.replace(R.id.simple_fragment, newFragment); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); @@ -74,26 +79,25 @@ public class FragmentStack extends Activity { public static class CountingFragment extends Fragment { int mNum; - public CountingFragment() { - mNum = -1; - } + /** + * Create a new instance of CountingFragment, providing "num" + * as an argument. + */ + static CountingFragment newInstance(int num) { + CountingFragment f = new CountingFragment(); - public CountingFragment(int num) { - mNum = num; + // Supply num input as an argument. + Bundle args = new Bundle(); + args.putInt("num", num); + f.setArguments(args); + + return f; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - if (savedInstanceState != null) { - mNum = savedInstanceState.getInt("num"); - } - } - - @Override - public void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - outState.putInt("num", mNum); + mNum = getArguments().getInt("num"); } @Override