Android - Fragment

1、静态添加:

  Activity布局文件中使用 fragment 标签添加;

2、动态添加:

  1)使用FragmentLayout 作为Fragment View容器

  2)通过FragmentManager 管理 Fragment

1
2
3
4
5
FragmentManager fm=getFragmentManager();
FragmentTransaction ft=fm.beginTransaction();
//通过ft进行 add\remove\replace\detach\hide 操作:
ft.add(R.id.fragment_container,new OneFragment);
ft.commit();

  3)管理Fragment回退栈: Activity管理Fragment回退栈来保存每次Fragment事务发生的变化,如果将Fragment任务添加到回退栈,当用户点击后退按钮时,将看到上一次保存的Fragment;  

  replace : 如果不添加事务到回退栈,被替换的Fragment实例会被销毁;添加到回退栈,fragment实例不会被销毁,视图层次依然会被销毁(即会调用onDestroyView)

1
2
3
4
5
6
7
8
9
10
11
12
FragmentTransaction ft=getFragmentManager().beginTransaction();
//由TwoFragment 替换 OneFragment
ft.replace(R.id.fragment_container, new TwoFragment());
//将 OneFragment 放入back stack
ft.addToBackStack(null); 
ft.commit();
 
//先隐藏当前Fragment,将事务添加到回退栈:视图层次将保留;
ft.hide(this);
ft.add(R.id.fragment_container,new TwoFragment());
ft.addToBackStack(null);
ft.commit();

  

3、Fragment 通信

  fragment之间无法直接通信,需要通过它们所依附的Activity;

   1)Activity中包含自己管理的Fragment的引用,通过引用调用Fragment public方法;

   2)通过FragmentManager findFragmentByTag()或者findFragmentById()获得Fragment引用;

 

4、如何处理运行时配置发生变化

  屏幕发生旋转时,默认的savedInstanceState会存储一些数据,包括Fragment实例;

  所以Activity onCreate()中只有在savedInstanceState==null时,才进行创建Fragment实例;

 

5、Fragmeny与ActionBar和MenuItem集成

  Fragment可以添加自己的MenuItem到Activity的ActionBar或者可选菜单中。

  a、在Fragment的onCreate中调用 setHasOptionsMenu(true);

  b、然后在Fragment中实现onCreateOptionsMenu

  c、如果希望在Fragment中处理MenuItem的点击,也可以实现onOptionsItemSelected;当然了Activity也可以直接处理该MenuItem的点击事件。

  

  

Fragment 好文:http://blog.csdn.net/lmj623565791/article/details/37970961

  

posted @   chenyizh  阅读(138)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
阅读排行:
· 从零开始开发一个 MCP Server!
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Ai满嘴顺口溜,想考研?浪费我几个小时
· Browser-use 详细介绍&使用文档
点击右上角即可分享
微信分享提示