类似于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; @Override protected 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); } @Override public 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"; @Override public void onAttach(Activity activity) { // TODO Auto-generated method stub super.onAttach(activity); Log.i(TAG, "-----Fragment1->>onAttach"); } @Override public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); Log.i(TAG, "-----Fragment1->>onCreate"); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub Log.i(TAG, "-----Fragment1->>onCreateView"); View view = inflater.inflate(R.layout.f1, null); return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onActivityCreated(savedInstanceState); Log.i(TAG, "-----Fragment1->>onActivityCreated"); } @Override public void onStart() { // TODO Auto-generated method stub super.onStart(); Log.i(TAG, "-----Fragment1->>onStart"); } @Override public void onResume() { // TODO Auto-generated method stub super.onResume(); Log.i(TAG, "-----Fragment1->>onResume"); } @Override public void onPause() { // TODO Auto-generated method stub Log.i(TAG, "-----Fragment1->>onPause"); super.onPause(); } @Override public void onStop() { // TODO Auto-generated method stub super.onStop(); Log.i(TAG, "-----Fragment1->>onStop"); } @Override public void onDestroyView() { // TODO Auto-generated method stub super.onDestroyView(); Log.i(TAG, "-----Fragment1->>onDestroyView"); } @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); Log.i(TAG, "-----Fragment1->>onDestroy"); } @Override public void onDetach() { // TODO Auto-generated method stub super.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"; @Override public void onAttach(Activity activity) { // TODO Auto-generated method stub super.onAttach(activity); Log.i(TAG, "-----Fragment2->>onAttach"); } @Override public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); Log.i(TAG, "-----Fragment2->>onCreate"); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub Log.i(TAG, "-----Fragment2->>onCreateView"); View view = inflater.inflate(R.layout.f2, null); return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onActivityCreated(savedInstanceState); Log.i(TAG, "-----Fragment2->>onActivityCreated"); } @Override public void onStart() { // TODO Auto-generated method stub super.onStart(); Log.i(TAG, "-----Fragment2->>onStart"); } @Override public void onResume() { // TODO Auto-generated method stub super.onResume(); Log.i(TAG, "-----Fragment2->>onResume"); } @Override public void onPause() { // TODO Auto-generated method stub Log.i(TAG, "-----Fragment2->>onPause"); super.onPause(); } @Override public void onStop() { // TODO Auto-generated method stub super.onStop(); Log.i(TAG, "-----Fragment2->>onStop"); } @Override public void onDestroyView() { // TODO Auto-generated method stub super.onDestroyView(); Log.i(TAG, "-----Fragment2->>onDestroyView"); } @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); Log.i(TAG, "-----Fragment2->>onDestroy"); } @Override public void onDetach() { // TODO Auto-generated method stub super.onDetach(); Log.i(TAG, "-----Fragment2->>onDetach"); } }
Fragment3.java
public class Fragment3 extends Fragment { public Fragment3() { // TODO Auto-generated constructor stub } @Override public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub View view = inflater.inflate(R.layout.f3, null); return view; } @Override public void onPause() { // TODO Auto-generated method stub super.onPause(); } }
Fragment4.java代码:
public class Fragment4 extends Fragment { public Fragment4() { // TODO Auto-generated constructor stub } public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub View view = inflater.inflate(R.layout.f4, null); return view; } @Override public void onPause() { // TODO Auto-generated method stub super.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演示效果: