1、DialogFragment的实现不同的表现如下面两种:在FragmentDialogOrActivity中可以看到具体的实现过程,不过就也下面的体现而忆。
当作为普通对话框显示时,调用方法如下:
- void showDialog() {
- // 创建 MyDialogFragment的实例并作为对话框显示
- DialogFragment newFragment = MyDialogFragment.newInstance();
- newFragment.show(getFragmentManager(), "dialog");
- }
当作为普通视图显示时,调用方法如下:
DialogFragment也支持自定义对话框的视图,自定义视图的方法为onCreateView ()方法。如果对话框的实现是从早期代码中移植过来的,则可以通过 onCreateDialog()封装Dialog对象来减少开发时间。
- FragmentTransaction ft = getFragmentManager().beginTransaction();
- DialogFragment newFragment = MyDialogFragment.newInstance();
- ft.add(R.id.embedded, newFragment);
- ft.commit();
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()取得它的实例.
1、使用findFragmentById() (用于在activity layout中提供一个UI的fragment)或findFragmentByTag()(适用于有或没有UI的fragment)获取activity中存在的fragment2、将fragment从后台堆栈中弹出, 使用 popBackStack() (模拟用户按下BACK 命令).//复制来的,不是很明白3、使用addOnBackStackChangeListener()注册一个监听后台堆栈变化的listener.
5、FragmentTransaction对fragment进行添加,移除,替换,以及执行其他动作重点。
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
每一个事务都是同时要执行的一套变化.可以在一个给定的事务中设置你想执行的所有变化,
使用诸如 add(), remove(), 和 replace().然后, 要给activity应用事务, 必须调用 commit().
apidemo中的FragmentCustomAnimations例子就是用到了activity中的返回的堆栈的保存。
用到的方法就是FragmentTransaction的 addToBackStack(null);把fragment放在堆栈里面去。
但是在做这之前要把他的状态保存好,这时就要重写onSaveInstanceState的方法,但在oncreate的时候取出保存状态的值。再返回。
具体看apidemo的FragmentCustomAnimations
- 必须最后调用 commit().
-
- 如果添加多个fragment到同一个容器, 那么添加的顺序决定了它们在view hierarchy中显示的顺序.
当执行一个移除fragment的事务时, 如果没有调用 addToBackStack(), 那么当事务提交后, 那个fragment会被销毁,并且用户不能导航回到它. 有鉴于此, 当移除一个fragment时,如果调用了 addToBackStack(), 那么fragment会被停止, 如果用户导航回来,它将会被恢复.我认为是重要的,以上的话,可以理解,remove后,加到堆栈后。按返回还是可以返回到之前的fragment,具体可以参考:FragmentDialog
ft.hide(fragment);
activity响应fragment的事件
有点难懂。不过还是可以看,也可以看原文博客,如上。Fragment比activity还要多出几个生命周期回调方法,这些额外的方法是为了与activity的交互而设立,如下:
onAttach()
当fragment被加入到activity时调用(在这个方法中可以获得所在的activity)。交互的时候还是可以用到的。
onCreateView()
当activity要得到fragment的layout时,调用此方法,fragment在其中创建自己的layout(界面)。
onActivityCreated()
当activity的onCreated()方法返回后调用此方法。、、、、g不是很明白。
onDestroyView()
当fragment的layout被销毁时被调用。
onDetach()
当fragment被从activity中删掉时被调用。
一旦activity进入resumed状态(也就是running状态),你就可以自由地添加和删除fragment了。因此,只有当activity在resumed状态时,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,不错的译文。他的多媒体也不错的。