目录(?)[-]

  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开发相关文章

最新文章

  1. C# WCF服务端搭建和客户端调用
  2. 网页闯关游戏(riddle webgame)--仿微信聊天的前端页面设计和难点
  3. Android 开发中常用 ADB 命令总结
  4. 设计模式之享元模式(FlyWeight)
  5. Objective-C访问SQLite
  6. 【HTML】Beginner4:Heading
  7. Even Tree
  8. 陈年佳酿之 - Winform ListView 控件 double click 事件中获取选中的row与column
  9. 201521123037 《Java程序设计》第11周学习总结
  10. notepad++最详情汇总
  11. 03-Python入门学习-Python基础
  12. C++ 知识回顾总结 -- 指针
  13. [转帖]IP地址、子网掩码、网络号、主机号、网络地址、主机地址以及ip段/数字-如192.168.0.1/24是什么意思?
  14. poj 3061(二分 or 尺取法)
  15. opencv学习之路(10)、ROI与mask掩码
  16. Windows系统崩溃后快速恢复Oracle数据库的妙招
  17. NS3 MyApp Class Reference
  18. 【HDU4689】Derangement(动态规划)
  19. 算法笔记_044:表达式计算求值(Java)
  20. 扩展运算符及其在vuex的辅助函数里的应用详解

热门文章

  1. php字符串操作: 去掉UTF-16的空格
  2. php输出缓冲区
  3. linux 5-sort,uniq,tar,split
  4. 【TFS】解决TFS编译中文乱码问题
  5. iOS UIImage 拉伸问题 (适用于UIButton等需要局部拉伸的情况)
  6. [原创]java WEB学习笔记36:Java Bean 概述,及在JSP 中的使用,原理
  7. 运行vo总结
  8. js里对php存贮的cookie进行读取和删除
  9. hdu 5475 线段树
  10. JAVA NIO之浅谈内存映射文件原理与DirectMemory