Fragment 知识

一、加载fragment的两种方式

(1)在所寄生的Activity的layout文件中声明

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <fragment android:name="com.example.news.ArticleListFragment"
            android:id="@+id/list"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="match_parent" />
    <fragment android:name="com.example.news.ArticleReaderFragment"
            android:id="@+id/viewer"
            android:layout_weight="2"
            android:layout_width="0dp"
            android:layout_height="match_parent" />
</LinearLayout>
每个fragment都要有唯一的标识,id或者tag属性,如果这两个都没有,那么就只能用container的id了


(2)可以在程序当中给一个已经存在的ViewGroup添加一个fragment。

FragmentManager fragmentManager = getFragmentManager()
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

ExampleFragment fragment = new ExampleFragment();
fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.commit();

add方法的第一个参数是容器,第二个是所要添加的fragment实例


(3)加载一个没有UI的fragment

可以参考这个,我也不知道用来干嘛的http://blog.csdn.net/think_soft/article/details/7272847


二、处理fragment

通过FragmentManager对象处理,而FragmentManager对象则是通过方法getFragmentManager得到。

FragmentManager能够做的事情有

(1)获取fragment对象:findFragmentById()findFragmentByTag()

(2)从后台栈中弹出fragment :popBackStack()

(3)注册一个后台栈(back stack)变化的监听器:addOnBackStackChangedListener()

(4)如上面的代码所示,还能开启一个事务:

FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();


三、处理FragmentTransaction

(1)获取FragmentTransaction

FragmentManager fragmentManager = getFragmentManager()
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

(2)可以调用 add()remove(), and replace()等方法进行修改,然后不要忘记commit。

(3)如果要保存修改之前的状态,可以在commit之前调用addToBackStack方法,这样在按返回键的时候就会回到修改之前的状态。

(4)如果你一次修改了好几个fragment,如果addToBackStack之后,那么返回时所有的修改的fragment的以前的状态都会被保存;如果对一个fragment做了好几个修改,那么返回时就会按照修改的顺序重新回到以前的状态(这个说的不太清楚)

(5)还可以添加动画Tip: For each fragment transaction, you can apply a transition animation, by callingsetTransition() before you commit.

(6)commit()不会被立刻被执行,因为他是在UI线程当中,只有UI线程可以的时候才会执行。如果要立即执行,可以调用executePendingTransactions()


四、fragment还可以对Activity当中的选项菜单和上下文菜单进行响应,通过调用setHasOptionsMenu() during onCreate()

五、对fragment的修改等操作是不会加入到后台栈当中,除非你明确的调用了addToBackStack()方法

六、fragment对应activity的生命周期



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值