Skip to content

Commit 09738ba

Browse files
committed
maintain fragment instance state
1 parent 79f98bf commit 09738ba

File tree

5 files changed

+45
-6
lines changed

5 files changed

+45
-6
lines changed

FragmentDeveloper/res/layout/sample_fragment.xml

+6
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,10 @@
1515
android:layout_height="wrap_content"
1616
android:src="@drawable/bucket_icon_icloud" />
1717

18+
<Button
19+
android:id="@+id/btn"
20+
android:layout_width="match_parent"
21+
android:layout_height="wrap_content"
22+
android:text="0" />
23+
1824
</LinearLayout>

FragmentDeveloper/src/com/dianping/example/fragment/SampleFragment.java

+29-1
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,41 @@
55
import android.view.LayoutInflater;
66
import android.view.View;
77
import android.view.ViewGroup;
8+
import android.widget.Button;
89

910
import com.dianping.example.fragmentdeveloper.R;
1011

1112
public class SampleFragment extends Fragment {
13+
Button btn;
14+
int counter;
15+
1216
@Override
1317
public View onCreateView(LayoutInflater inflater, ViewGroup container,
1418
Bundle savedInstanceState) {
15-
return inflater.inflate(R.layout.sample_fragment, container, false);
19+
View v = inflater.inflate(R.layout.sample_fragment, container, false);
20+
btn = (Button) v.findViewById(R.id.btn);
21+
btn.setOnClickListener(new View.OnClickListener() {
22+
public void onClick(View v) {
23+
btn.setText(String.valueOf(++counter));
24+
}
25+
});
26+
if (savedInstanceState != null) {
27+
counter = savedInstanceState.getInt("counter");
28+
}
29+
30+
btn.setText(String.valueOf(counter));
31+
return v;
32+
}
33+
34+
@Override
35+
public void onViewCreated(View view, Bundle savedInstanceState) {
36+
super.onViewCreated(view, savedInstanceState);
37+
38+
}
39+
40+
@Override
41+
public void onSaveInstanceState(Bundle outState) {
42+
super.onSaveInstanceState(outState);
43+
outState.putInt("counter", counter);
1644
}
1745
}

FragmentDeveloper/src/com/dianping/example/fragmentdeveloper/FragmentDeveloper.java

+7-5
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,12 @@ protected void onCreate(Bundle savedInstanceState) {
2222
rootView.setId(android.R.id.primary);
2323
setContentView(rootView);
2424

25-
Fragment f = new SampleFragment();
26-
FragmentManager fm = getFragmentManager();
27-
FragmentTransaction ft = fm.beginTransaction();
28-
ft.add(android.R.id.primary, f);
29-
ft.commit();
25+
if (savedInstanceState == null) {
26+
Fragment f = new SampleFragment();
27+
FragmentManager fm = getFragmentManager();
28+
FragmentTransaction ft = fm.beginTransaction();
29+
ft.add(android.R.id.primary, f);
30+
ft.commit();
31+
}
3032
}
3133
}
Binary file not shown.

FragmentLoader/src/com/dianping/example/fragmentloader/FragmentLoader.java

+3
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,9 @@ protected void onCreate(Bundle savedInstanceState) {
8383
rootView.setId(android.R.id.primary);
8484
setContentView(rootView);
8585

86+
if (savedInstanceState != null)
87+
return;
88+
8689
if ("com.dianping.intent.action.LOAD_FRAGMENT".equals(getIntent()
8790
.getAction())) {
8891
try {

0 commit comments

Comments
 (0)