@Override当我们这个Activity被销毁而重新创建re-created的时候,通过onCreate(Bundle)中的参数获取到该信息,如下:
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("name","lly");
}
@Override注意:onSaveInstanceState()方法只是在Activity“很容易被销毁的时候调用”,它并不是Activity的生命周期方法,这个调用时机是不确定的,对于点击返回按钮这种主动行为不会去调用这个方法。网上很多说在按下HOME键和旋转屏幕的时候会去调用,但是经过我测试一下,发现不管是我按下HOME键还是旋转屏幕,这个方法都没有被调用。按我理解,这个方法只有在“很容易被销毁的时候调用”,这个尺度应该是系统根据手机具体内存资源情况决定是否调用。因此官方文档中推荐在onPause中进行数据信息的保存操作。(Note that it is important to save persistent data in
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(savedInstanceState != null){
name = savedInstanceState.getString("name");
}
}
onPause()
instead of onSaveInstanceState(Bundle)
because the latter is not part of the lifecycle callbacks, so will not be called in every situation as described in its documentation.)<style name= "Theme.FloatActivity" parent= "android:style/Theme.Dialog" >
<!-- float_box为我们定义的窗口背景 ,这个不是必须的-->
<item name="android:windowBackground" > @drawable /float_box</item>
</style> <?xml version= "1.0" encoding= "utf-8" ?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="#ffffff" />
<stroke android:width="3dp" android:color= "#ff000000" />
<corners android:radius="3dp" />
<padding android:left="10dp" android:top= "10dp" android:right= "10dp" android:bottom= "10dp" />
</shape>/**
* APP管理类
*
*/
public class AppManager {
private static Stack<Activity> activityStack;
private static AppManager instance;
private PendingIntent restartIntent;
private AppManager() {
}
/**
* 单一实例
*/
public static AppManager getAppManager() {
if (instance == null) {
instance = new AppManager();
}
return instance;
}
/**
* 添加Activity到堆栈
*/
public void addActivity(Activity activity) {
if (activityStack == null) {
activityStack = new Stack<Activity>();
}
activityStack.add(activity);
}
/**
* 获取当前Activity(堆栈中最后一个压入的)
*/
public Activity currentActivity() {
Activity activity = activityStack.lastElement();
return activity;
}
/**
* 结束当前Activity(堆栈中最后一个压入的)
*/
public void finishActivity() {
Activity activity = activityStack.lastElement();
finishActivity(activity);
}
/**
* 结束指定的Activity
*/
public void finishActivity(Activity activity) {
if (activity != null) {
activityStack.remove(activity);
activity.finish();
activity = null;
}
}
/**
* 结束指定类名的Activity
*/
public void finishActivity(Class<?> cls) {
for (Activity activity : activityStack) {
if (activity.getClass().equals(cls)) {
finishActivity(activity);
}
}
}
/**
* 结束所有Activity
*/
public void finishAllActivity() {
for (int i = 0, size = activityStack.size(); i < size; i++) {
if (null != activityStack.get(i)) {
activityStack.get(i).finish();
}
}
activityStack.clear();
}
/**
* 退出应用程序
*/
public void exitApp(Context context) {
try {
finishAllActivity();
System.exit(0);
android.os.Process.killProcess(android.os.Process.myPid());
} catch (Exception e) {
}
}
}//在添加Fragment时
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction tx = fm.beginTransaction();
tab1Fragment = new Fragment1();
tx.add(R.id.content, tab1Fragment,"fragment1");
tx.commit();
//在使用时,比如切换到tab2时
if(tab1Fragment != null){
tx.hide(tab1Fragment);
tx.show(tab2Fragment);
tx.commit();
}else{
tab1Fragment = (Fragment1) fm.findFragmentByTag("fragment1");
tx.hide(tab1Fragment);
tx.show(tab2Fragment);
tx.commit();
}public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction tx = fm.beginTransaction();
tx.add(R.id.content, new Fragment1(),"fragment1");
tx.commit();
}
} public class Fragment1 extends Fragment implements OnClickListener {
private Button mBtn;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_one, container, false);
mBtn = (Button) view.findViewById(R.id.id_fragment_one_btn);
mBtn.setOnClickListener(this);
return view;
}
@Override
public void onClick(View v) {
Fragment2 fTwo = new Fragment2();
FragmentManager fm = getFragmentManager();
FragmentTransaction tx = fm.beginTransaction();
tx.replace(R.id.content, fTwo, "fragment2");
tx.addToBackStack(null); //将当前事务添加到回退栈
tx.commit();
}
} public class Fragment2 extends Fragment implements OnClickListener {
private Button mBtn ;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_two, container, false);
mBtn = (Button) view.findViewById(R.id.id_fragment_two_btn);
mBtn.setOnClickListener(this);
return view ;
}
@Override
public void onClick(View v) { //打开Fragment3
Fragment3 fThree = new Fragment3();
FragmentManager fm = getFragmentManager();
FragmentTransaction tx = fm.beginTransaction();
tx.hide(this); //隐藏当前显示的Fragment2
tx.add(R.id.content , fThree, "fragment3"); //添加Fragment3
tx.addToBackStack(null); //将当前事务添加到回退栈
tx.commit();
}
} 因为Fragment依附于Activity,Activity与Fragment通信,可以有以下几种办法:
(1)如果你Activity中包含自己管理的Fragment的引用,可以通过引用直接访问所有的Fragment的public方法
(2)如果Activity中没有保存任何Fragment的引用,那么没关系,每个Fragment都有一个唯一的TAG或者ID,可以通过getSupportFragmentManager().findFragmentByTag()或者findFragmentById()获得任何Fragment实例,然后进行操作。
(3)在Fragment中可以通过getActivity得到当前绑定的Activity的实例,然后进行操作。
原文:http://blog.csdn.net/shakespeare001/article/details/51450818