类似于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演示效果: