Fragment回退栈
类似与Android系统为Activity维护一个任务栈,我们也可以通过Activity维护一个回退栈来保存每次Fragment事务发生的变化。
如果你将Fragment任务添加到回退栈,当用户点击后退按钮时,将看到上一次的保存的Fragment。
一旦Fragment完全从后退栈中弹出,用户再次点击后退键,则退出当前Activity。
transaction.add(R.id.right, rightFragment);
transaction.addToBackStack(null);
Fragment传递参数
1. Activity在构建Fragment的时候,向他传递参数setArguments(Bundle b); bundle可以携带基础数据类型,数组,以及序列化对象
2. Activity想xml中的Fragment传递数据
//找到xml中静态创建的Fragment
framgent = (ContentFragment)
getSupportFragmentManager().findFragmentByTag("fragment");
//findFragmentById(R.id.fragment);
3. Fragment之间传参 非常少
通过Activity作为桥梁,获取FragmentManager.findFragmentById(Tag)获取引用;
4. 任何的类都可以通过单例模式来获取数据
Android组件单例(View,Fragment,Activity,Application)都不允许构造方法私有化
必须保证该对象是单例的
Application由系统创建,已经保持了单例
Activity由系统创建,也保持了单例
但是Fragment由自己创建,并没有保持单例
步骤如下:
静态本类对象
static MainActivity instance;
公开访问方法
public static MainActivity getInstance() {
return instance;
}
在生命周期onCreate的时候 将静态本类对象赋值
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
instance = this;
setContentView(R.layout.activity_main);
}
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:id="@+id/activity_main" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 android:orientation="horizontal" 7 tools:context="com.example.lesson10_backtostack.MainActivity"> 8 9 <fragment 10 android:id="@+id/fragment2" 11 android:name="com.example.lesson10_backtostack.SingleFragment" 12 android:layout_weight="1" 13 android:layout_width="0dp" 14 android:layout_height="match_parent"/> 15 16 <ListView 17 android:id="@+id/lv" 18 android:layout_width="0dp" 19 android:layout_weight="1" 20 android:layout_height="match_parent"/> 21 22 <FrameLayout 23 android:id="@+id/fl_fragment" 24 android:layout_width="0dp" 25 android:layout_height="match_parent" 26 android:layout_weight="5" /> 27 </LinearLayout>