目录(?)[-]

  1. Transaction的一些操作
  2. 再谈FragmentManager
    1. 调用其他fragment的方法
    2. 唤起activity
    3. 唤起fragment和相互通信
  3. 一些其它

Transaction的一些操作

Transaction提供add()、hide()、show()、remove()等功能。下面我们利用这些功能通过fragment的隐藏和显示,为用户提供切换的效果。

public void showDetails(int index){  
    if(index <0) 
        index = 0;        
    //将所有书的简介都生成fragment,通过add()加入容器中 
    FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    if(details == null){  
        details = new DetailFragment[BooksInfo.TITLES.length]; 
        for(int i = 0; i < details.length; i ++){ 
            details[i]= DetailFragment.newInstance(i); 
            ft.add(R.id.details,details[i]);  //或者使用add(id, fragment, tag),同时为fragment指定tag
        } 
    }        
    //根据用户点击的书目序号,将相应的简介显示,而将其他简介隐藏。  
    for(int i = 0 ; i< details.length; i ++){ 
        if(i == index) 
            ft.show(details[i]); 
        else  
            ft.hide(details[i]); 
    }        
    //任何fragment transaction处理后,都通过commit()进行确认。 
    ft.commit(); 
}

在之前的基础小例子中,使用了replace(),相当于执行了remove()和add()的操作。commit()是加入UI线程的执行操作。

再谈FragmentManager

FragmentManager是在activity中与fragment对象进行互操作的接口,在activity和fragment(已与activity关联attach)中可以通过getFragmentManager()获取。通过管理器,可以获得fragement transaction,根据id,tag等获取fragment。

我们可以通过管理器的dump()功能输出debug信息。或者使用getFragmentManager().enableDebugLogging(true);来提供相关的debug功能。

调用其他fragment的方法

FragmentManager管理与activity相关的所有fragment。如果在fragment A中要调用到Fragment B的某个方法,可以通过管理器找到其他fragment的对象,如下处理:

FragmentB fragOther = (FragmentB)getFragmentManager().findFragmentByTag(“b”); 
fragOther.someMethod( … );

唤起activity

在fragment可以直接使用startActivity()和startActivityForResult()方法,以及回调函数onActivityResult()。

唤起fragment和相互通信

如果在fragment A中要唤起 fragment B,在FragmentA中处理如下:

FragmentB bFrag  = new FragmentB(); 
bFrag.setTargetFragment(this, 0); 
getFragmentManager()fm.beginTransaction().add(bFrag, "work").commit();

创建和通过transaction加入没有什么特别,关键是setTragetFragment(),这样在FragmentB中就可以获得FragmentA的对象,可调用FragmentA的方法,Fragment B的代码例子如下:

TextView tv = (TextView)getTargetFragment().getView().findViewById(R.id.text1);
tv.setText(“Set from the called fragment”);

一些其它

有时在应用中为了某种逻辑,使用没有view层级的,即不可视的fragment,用之存储一些信息,当activity或者fragment由于UI配置改变进行re-create时,提供帮助。

在基础小例子中,学习了Fragment类以及子类ListFragment,此外还有DialogFragment,PreferenceFragment和WebViewFragment。

本博文涉及的例子代码,可以在Pro Android学习:Fragment中下载。

相关链接: 我的Android开发相关文章

【转】 Pro Android学习笔记(四三):Fragment(8):再谈Transaction和管理器的更多相关文章

  1. 【转】Pro Android学习笔记(三十):Menu(1):了解Menu

    目录(?)[-] 创建Menu MenuItem的属性itemId MenuItem的属性groupId MenuItem的属性orderId MenuItem的属性可选属性 Menu触发 onOpt ...

  2. 【转】Pro Android学习笔记(三):了解Android资源(上)

    在Android开发中,资源包括文件或者值,它们和执行应用捆绑,无需在源代码中写死,因此我们可以改变或替换他们,而无需对应用重新编译. 了解资源构成 参考阅读Android学习笔记(三八):资源res ...

  3. 【转】 Pro Android学习笔记(三二):Menu(3):Context菜单

    目录(?)[-] 什么是Context menu 注册View带有Context menu 填Context菜单内容 Context菜单点击触发 什么是Context menu 在桌面电脑,我们都很熟 ...

  4. Android学习笔记(十八)——再谈升级数据库

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 之前我们为了保证数据库中的表是最新的,只是简单地在 onUpgrade()方法中删除掉了当前所有的表,然后强制 ...

  5. 【转】 Pro Android学习笔记(三三):Menu(4):Alternative菜单

    目录(?)[-] 什么是Alternative menu替代菜单 小例子说明 Alternative menu代码 关于Category和规范代码写法 关于flags 多个匹配的itemId等参数 什 ...

  6. 【转】 Pro Android学习笔记(四十):Fragment(5):适应不同屏幕或排版

    目录(?)[-] 设置横排和竖排的不同排版风格 改写代码 对于fragment,经常涉及不同屏幕尺寸和不同的排版风格.我们在基础小例子上做一下改动,在横排的时候,仍是现实左右两个fragment,在竖 ...

  7. 【转】 Pro Android学习笔记(四二):Fragment(7):切换效果

    目录(?)[-] 利用setTransition 利用setCustomAnimations 通过ObjectAnimator自定义动态效果 程序代码的编写 利用fragment transactio ...

  8. 【转】 Pro Android学习笔记(七四):HTTP服务(8):使用后台线程AsyncTask

    目录(?)[-] 5秒超时异常 AsyncTask 实现AsyncTask抽象类 对AsyncTask的调用 在哪里运行 其他重要method 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注 ...

  9. 【转】 Pro Android学习笔记(五六):配置变化

    目录(?)[-] Activity的destorycreate过程 Fragment的destorycreate过程 onSaveInstanceState saveFragmentInstanceS ...

随机推荐

  1. window.scrollTo(0,document.body.scrollHeight)

    滑轮到页面底部 左下角window.scrollTo(0,document.body.scrollHeight) 右下角window.scrollTo(document.body.scrollWidt ...

  2. python字典中包含列表时:查找字典中某个元素及赋值

    直接上代码: 运行效果:

  3. Webpack探索【1】--- 基础知识

    本文主要说明Webpack的一些基础内容.

  4. 3.写一个hello world页面

    经过1和2的学习,现在已经可以正常启动Django了,这一节说怎么写一个hello world页面,所有的环境基础就是1和2中搭建的 1.在app模块中添加页面 具体为 hello_django\he ...

  5. Linux c编程:同步属性

    就像线程具有属性一样,线程的同步对象(如互斥量.读写锁.条件变量.自旋锁和屏障)也有属性 1.互斥量属性 用pthread_mutexattr_init初始化pthread_mutexattr_t结构 ...

  6. spark 在yarn执行job时一直抱0.0.0.0:8030错误

    近日新写完的spark任务放到yarn上面执行时,在yarn的slave节点中一直看到报错日志:连接不到0.0.0.0:8030 . The logs are as below: 2014-08-11 ...

  7. BAPI LIST

    [转自 http://blog.csdn.net/minsenwu/article/details/8432081] 库存管理BAPI 库存: 1. BAPI_MATERIAL_AVAILABILIT ...

  8. centOS-64位通过YUM源安装nginx

    第一步:在 /etc/yum.repos.d/ 目录下,建立名叫nginx.repo的软件源配置文件.        文件 nginx.repo 的内容是: [nginx] name=nginx re ...

  9. 解决ajax get方式提交中文参数乱码问题

    最近在工作中遇到,使用ajax get方式提交中文参数的时候出现乱码,通过上网搜索,总结出比较简单的两种解决方案: 第一种,由于tomcat默认的字符集是ISO-8859-1,修改Tomcat中的se ...

  10. IImage--factory

    <?php /* 实例4 */ /* 使用工厂类解析图像工作 */ interface IImage { function getWidth(); function getHeight(); f ...