Fragment学习之回退栈的管理

来源:互联网 发布:南北方饮食差异 知乎 编辑:程序博客网 时间:2024/06/05 03:15

类似于Activity,当用户在点击后退键时,系统会将Activity保存起来,Fragment也有这种功能,不过我们要显示的调用addToBackStack()方法进行保存。

MainActivity.java代码如下:

public class MainActivity extends FragmentActivity implements OnClickListener {private FragmentManager manager;private FragmentTransaction transaction;private Button button1, button2, button3, button4;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);/*获取manager*/manager = this.getSupportFragmentManager();/** * 获取对应的控件,以及设置对应的监听事件 */button1 = (Button) this.findViewById(R.id.button1);button1.setOnClickListener(this);button2 = (Button) this.findViewById(R.id.button2);button2.setOnClickListener(this);button3 = (Button) this.findViewById(R.id.button3);button3.setOnClickListener(this);button4 = (Button) this.findViewById(R.id.button4);button4.setOnClickListener(this);}@Overridepublic void onClick(View v) {/*获取事物*/transaction = manager.beginTransaction();switch (v.getId()) {case R.id.button1:Fragment1 fragment1 = new Fragment1();/*替换对应的容器id*/transaction.replace(R.id.center, fragment1, "fragment1");/*把fragment1添加到回退栈中*/transaction.addToBackStack("fragment1");break;case R.id.button2:Fragment2 fragment2 = new Fragment2();/*替换*/transaction.replace(R.id.center, fragment2, "fragment2");/*把fragment2添加到回退栈*/transaction.addToBackStack("fragment2");break;case R.id.button3:Fragment3 fragment3 = new Fragment3();/*替换*/transaction.replace(R.id.center, fragment3, "fragment3");/*把fragment3添加到回退栈*/transaction.addToBackStack("fragment3");break;case R.id.button4:Fragment4 fragment4 = new Fragment4();/*替换*/transaction.replace(R.id.center, fragment4, "fragment4");/*把fragment4添加到回退栈*/transaction.addToBackStack("fragment4");break;}/*提交事物*/transaction.commit();}}

Fragment1.java代码:

public class Fragment1 extends Fragment {public Fragment1() {// TODO Auto-generated constructor stub}private final String TAG = "Fragment1";@Overridepublic void onAttach(Activity activity) {// TODO Auto-generated method stubsuper.onAttach(activity);Log.i(TAG, "-----Fragment1->>onAttach");}@Overridepublic void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);Log.i(TAG, "-----Fragment1->>onCreate");}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {// TODO Auto-generated method stubLog.i(TAG, "-----Fragment1->>onCreateView");View view = inflater.inflate(R.layout.f1, null);return view;}@Overridepublic void onActivityCreated(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onActivityCreated(savedInstanceState);Log.i(TAG, "-----Fragment1->>onActivityCreated");}@Overridepublic void onStart() {// TODO Auto-generated method stubsuper.onStart();Log.i(TAG, "-----Fragment1->>onStart");}@Overridepublic void onResume() {// TODO Auto-generated method stubsuper.onResume();Log.i(TAG, "-----Fragment1->>onResume");}@Overridepublic void onPause() {// TODO Auto-generated method stubLog.i(TAG, "-----Fragment1->>onPause");super.onPause();}@Overridepublic void onStop() {// TODO Auto-generated method stubsuper.onStop();Log.i(TAG, "-----Fragment1->>onStop");}@Overridepublic void onDestroyView() {// TODO Auto-generated method stubsuper.onDestroyView();Log.i(TAG, "-----Fragment1->>onDestroyView");}@Overridepublic void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();Log.i(TAG, "-----Fragment1->>onDestroy");}@Overridepublic void onDetach() {// TODO Auto-generated method stubsuper.onDetach();Log.i(TAG, "-----Fragment1->>onDetach");}}

Fragment2.java代码

public class Fragment2 extends Fragment {public Fragment2() {// TODO Auto-generated constructor stub}private final String TAG = "Fragment2";@Overridepublic void onAttach(Activity activity) {// TODO Auto-generated method stubsuper.onAttach(activity);Log.i(TAG, "-----Fragment2->>onAttach");}@Overridepublic void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);Log.i(TAG, "-----Fragment2->>onCreate");}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {// TODO Auto-generated method stubLog.i(TAG, "-----Fragment2->>onCreateView");View view = inflater.inflate(R.layout.f2, null);return view;}@Overridepublic void onActivityCreated(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onActivityCreated(savedInstanceState);Log.i(TAG, "-----Fragment2->>onActivityCreated");}@Overridepublic void onStart() {// TODO Auto-generated method stubsuper.onStart();Log.i(TAG, "-----Fragment2->>onStart");}@Overridepublic void onResume() {// TODO Auto-generated method stubsuper.onResume();Log.i(TAG, "-----Fragment2->>onResume");}@Overridepublic void onPause() {// TODO Auto-generated method stubLog.i(TAG, "-----Fragment2->>onPause");super.onPause();}@Overridepublic void onStop() {// TODO Auto-generated method stubsuper.onStop();Log.i(TAG, "-----Fragment2->>onStop");}@Overridepublic void onDestroyView() {// TODO Auto-generated method stubsuper.onDestroyView();Log.i(TAG, "-----Fragment2->>onDestroyView");}@Overridepublic void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();Log.i(TAG, "-----Fragment2->>onDestroy");}@Overridepublic void onDetach() {// TODO Auto-generated method stubsuper.onDetach();Log.i(TAG, "-----Fragment2->>onDetach");}}

Fragment3.java
public class Fragment3 extends Fragment {public Fragment3() {// TODO Auto-generated constructor stub}@Overridepublic void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {// TODO Auto-generated method stubView view = inflater.inflate(R.layout.f3, null);return view;}@Overridepublic void onPause() {// TODO Auto-generated method stubsuper.onPause();}}

Fragment4.java代码:

public class Fragment4 extends Fragment {public Fragment4() {// TODO Auto-generated constructor stub}public void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {// TODO Auto-generated method stubView view = inflater.inflate(R.layout.f4, null);return view;}@Overridepublic void onPause() {// TODO Auto-generated method stubsuper.onPause();}}

布局文件就是一个简单的文本,代码就不贴了!


我们先来看看程序运行的流程:


第一个Fragment被加载:

-----Fragment1->>onAttach
 -----Fragment1->>onCreate
 -----Fragment1->>onCreateView
 -----Fragment1->>onActivityCreated
 -----Fragment1->>onStart
 -----Fragment1->>onResume


 第二个Fragment被加载:
 -----Fragment1->>onPause
 -----Fragment1->>onStop
 -----Fragment1->>onDestroyView
 -----Fragment2->>onAttach
 -----Fragment2->>onCreate
 -----Fragment2->>onCreateView
 -----Fragment2->>onActivityCreated
 -----Fragment2->>onStart
 -----Fragment2->>onResume


第三个Fragment被加载:

-----Fragment2->>onPause
 -----Fragment2->>onStop
 -----Fragment2->>onDestroyView


回退到第二个Fragment:

-----Fragment2->>onCreateView
 -----Fragment2->>onActivityCreated
 -----Fragment2->>onStart
 -----Fragment2->>onResume
 

demo演示效果:


0 0
原创粉丝点击