fragment总结

1、DialogFragment的实现不同的表现如下面两种:在FragmentDialogOrActivity中可以看到具体的实现过程,不过就也下面的体现而忆。

当作为普通对话框显示时,调用方法如下:

 
 
  1. void showDialog() {  
  2.    // 创建 MyDialogFragment的实例并作为对话框显示  
  3.    DialogFragment newFragment = MyDialogFragment.newInstance();  
  4.    newFragment.show(getFragmentManager(), "dialog");  

当作为普通视图显示时,调用方法如下:
 
 
  1. FragmentTransaction ft = getFragmentManager().beginTransaction();  
  2. DialogFragment newFragment = MyDialogFragment.newInstance();  
  3. ft.add(R.id.embedded, newFragment);  
  4. ft.commit(); 
DialogFragment也支持自定义对话框的视图,自定义视图的方法为onCreateView ()方法。如果对话框的实现是从早期代码中移植过来的,则可以通过 onCreateDialog()封装Dialog对象来减少开发时间。

DialogFragment的实现可以参考APIdemo的FragmentAlertDialog,里面通过一个静态类的静态方法来实现化一个dialogfragment的实例。

好像看过的例子都是通过静态的方式来实现化了,再加上一个参数的加载 setArguments

如下图:

        public static MyAlertDialogFragment newInstance(int title) {
            MyAlertDialogFragment frag = new MyAlertDialogFragment();
            Bundle args = new Bundle();
            args.putInt("title", title);
            frag.setArguments(args);
            return frag;
        }

实现的弹出界面在onCreateView () 或是 onCreateDialog()中实现。

2、从activity向fragment传递参数。

方法是可以通过setArguments(String str)这样的方法来传递的。

从目前读到的DEMO来看是可以这样设置。虽然也是可以直接传过来。不过有这样的方法那就用就是的。

3、fragment也是可以支持内容菜单的。和activity一样注册内容菜单就可以了。registerForContextMenu(int rid);

4、fragmentManager可以实现管理activity中fragment通过调用activity的getFragmentManager()取得它的实例.

FragmentManager可以做如下一些事情:
1、使用findFragmentById() (用于在activity layout中提供一个UI的fragment)或findFragmentByTag()
   (适用于有或没有UI的fragment)获取activity中存在的fragment
2、将fragment从后台堆栈中弹出, 使用 popBackStack() (模拟用户按下BACK 命令).//复制来的,不是很明白
3、使用addOnBackStackChangeListener()注册一个监听后台堆栈变化的listener.

5、FragmentTransaction对fragment进行添加,移除,替换,以及执行其他动作重点。

从 FragmentManager 获得一个FragmentTransaction的实例 :

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

每一个事务都是同时要执行的一套变化.可以在一个给定的事务中设置你想执行的所有变化,

使用诸如 add(), remove(), 和 replace().然后, 要给activity应用事务, 必须调用 commit().

apidemo中的FragmentCustomAnimations例子就是用到了activity中的返回的堆栈的保存。

用到的方法就是FragmentTransaction的 addToBackStack(null);把fragment放在堆栈里面去。

但是在做这之前要把他的状态保存好,这时就要重写onSaveInstanceState的方法,但在oncreate的时候取出保存状态的值。再返回。

具体看apidemo的FragmentCustomAnimations

添加变化到 FragmentTransaction的顺序不重要, 除以下例外:
  • 必须最后调用 commit().
    • 如果添加多个fragment到同一个容器, 那么添加的顺序决定了它们在view hierarchy中显示的顺序.
    当执行一个移除fragment的事务时, 如果没有调用 addToBackStack(), 那么当事务提交后, 那个fragment会被销毁,并且用户不能导航回到它. 有鉴于此, 当移除一个fragment时,如果调用了 addToBackStack(), 那么fragment会被停止, 如果用户导航回来,它将会被恢复.我认为是重要的, 
    以上的话,可以理解,remove后,加到堆栈后。按返回还是可以返回到之前的fragment,具体可以参考:FragmentDialog

6、fragment的显示和隐藏可以用FragmentTransaction的show 或是hide来实现,
 ft.show(fragment);
 ft.hide(fragment);
7、 findFragmentById可以通过查找xml布局文件中android:id来查找 。
而findFragmentByTag也是可以的,通过 android:tag这个标记来查找,不过好像不是很灵活,也可以用下面的代码来增加。
Fragment prev = getFragmentManager().findFragmentByTag("dialog");
通过show中的第二个参数来显示,第二个参数就是tag
 newFragment.show(ft, "dialog");
8、fragment与activty之间的通讯:http://blog.csdn.net/nkmnkm/article/details/7182979
大概也就是通过getActivity,getFragmentManager()的方法来取得各自的控件。

activity响应fragment的事件

有点难懂。不过还是可以看,也可以看原文博客,如上。
自己也没有实现这个DEMO,实现了再发上来。
好了,fragment应该也可以结束了。
就是看了实例,不过还没有做过项目来实践……
还有的问题:生命周期还没有写上。后面补上

Fragmentactivity还要多出几个生命周期回调方法,这些额外的方法是为了与activity的交互而设立,如下:

onAttach()

fragment被加入到activity时调用(在这个方法中可以获得所在的activity)。交互的时候还是可以用到的。

onCreateView()

activity要得到fragmentlayout时,调用此方法,fragment在其中创建自己的layout(界面)

onActivityCreated()

activityonCreated()方法返回后调用此方法。、、、、g不是很明白。

onDestroyView()

fragmentlayout被销毁时被调用。

onDetach()

fragment被从activity中删掉时被调用。

一旦activity进入resumed状态(也就是running状态),你就可以自由地添加和删除fragment了。因此,只有当activityresumed状态时,fragment的生命周期才能独立的运转,其它时候是依赖于activity的生命周期变化的。

onCreate

   系统创建Fragments 时调用,可做执行初始化工作或者当程序被暂停或停止时用来恢复状态,跟Activity 中的onCreate相当。 

onCreateView

   用于首次绘制用户界面的回调方法,必须返回要创建的Fragments 视图UI。假如你不希望提供Fragments 用户界面则可以返回NULL。 

onPause 

    当用户离开这个Fragments 的时候调用,这时你要提交任何应该持久的变化,因为用户可能不会回来。更多的事件可以参考上图的生命周期关系图。


参考:http://blog.csdn.net/xyz_lmn/article/details/6930753

参考:博客:http://blog.csdn.net/nkmnkm/article/details/7172483,不错的译文。他的多媒体也不错的。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值