为了解决:从一个Activity中的其中一个Fragment中跳转到另一个Activity中,在此时的Activity中需要点击一个控件到原先的Activity中并返回到原先的Activity中显示的Fragment
解决方案:将带有Fragment的Activity在AndroidManifest中设置其启动模式为android:launchMode=”singleTask”。由于singleTask模式下,每次都返回到原先的Activity中并不会创建新的Activity,所以需要重写onNewIntent方法,并且在其附属的Fragment中调用onResume方法与之对应。
<activity
android:name=".activity.MainActivity"
android:launchMode="singleTask"
/>
在Activity中
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Log.e("locationStr","onNewIntent");
setIntent(intent);
getIntent().putExtras(intent);
}
在Fragment中
@Override
public void onResume() {
super.onResume();
locationStr = getActivity().getIntent().getStringExtra("locationStr");
location_btn.setText(locationStr);
}
Android的四中启动模式
1.standard:默认模式 (拿来主义)
每次都会创建一个新的Activity(多次实例化)
android:launchMode=”standard”
2.singleTop(拒绝堆叠)
没有这个Activity 直接创建
如果有 并且在栈顶 直接拿来使用 调用onNewIntent(Intent intent)方法
如果有 没有在栈顶 重新创建一个Activity实例
android:launchMode=”singleTop”、
3.singleTask:(独立门户)
没有Activity直接创建
如果有 并且在栈顶 直接拿来使用 调用onNewIntent(Intent intent)方法
如果有 没有在栈顶 将在它上方的 Activity pop出去 自身有回到栈顶位置调用onNewIntent(Intent intent)方法
android:launchMode=”singleTask”
4.singleInstance (孤独寂寞)(这个用法不多 浪费空间)
系统会单独分配一个stack 不允许其他的Activity和他共享一个stack
android:launchMode=”singleInstance “