紧接着上次博客的内容,这次正式开始讲 Fragment 有关的内容。继续使用上次写好的工程,先讲 Fragment 的静态加载。
创建 Fragment 需要创建一个 Fragment 的子类或继承 Fragment 已经存在的子类。
静态加载:
在 Activity 的 layout 文件中声明 Fragment,需要特别注意的是 < fragment >中的 android:name 属性指定了在 layout 中实例化的 Fragment 类:包名.类名
标识 Fragment 的方法:
(1)android:id 属性指定唯一id
或(2)android:tag 属性提供唯一字符串
如果想让 Fragment 加载自己的布局文件,就要重写 onCreateView 方法。它会在绘制 Fragment 界面组建时调用。

在 java 目录上右键 new -> package,默认不变,确认,名字取做 com.example.jingtai。然后在 jingtai 这个目录上右键 new -> activity -> empty activity,名字取做 JingActivity,其他不变,确认。
展开 res 目录,右键 layout -> new -> fragment -> fragment(blank),名字取做 JingFragment,完成后 java 目录下会自动生成 layout 目录,里面有一个JingFragment 类,并且它继承 Fragment,这个我们先不管。res 下 layout 下有 fragment_jing.xml,这就是 Fragment 类要加载的布局文件。我们先修改它。由于使用的是静态加载,根节点我们也要修改。

这里我加入了一个 TextView 和一个 Button 为后面的功能做准备。
然后我们再修改 JingFragment 使它加载这个布局。
在 onCreateView 绘制布局文件时需要返回 View,所以这里,我们把 layout 布局文件转换成 View 对象,改写 return 语句。

修改 JingActivity 的布局文件 activity_jing.xml 。

虽然这里已经静态加载了 Fragment,但是运行项目的话依然不会有任何效果,因为这是在一个 Activity中显示出来的,我们并没有跳转到这个 Activity,现在我们来跳转一下。
回到 MainActivity,由于我们已经加载过自定义控件,现在我们可以直接使用 RadioGroup,先实例化它,使用实现接口的方式进行注册监听器,让 MainActivity 实现 OnCheckedChangeListener,方便对四个按钮都设置事件。然后让第一个按钮跳转到 JingActivity。

现在运行项目,点击 静态加载,就发现我们已经加 载成功了!!

还记得刚才我们的 MainActivity 布局文件加载了一个自定义控件,然后再 MainActivity 中也可以使用加载进来的自定义控件里面的按钮吗? 对于 Fragment 来说也是可以这样的。
当一个布局文件中已经通过静态加载的方式把 Fragment 加载到 Activity 的布局文件中时,那么 Fragment 中的布局文件对于 Activity 本身也就是共享的,所以可以通过 findViewByID(…)直接调用这个对象。
修改 JingFragment 中的代码

修改 JingActiivty 中的代码

然后运行项目,当点击按钮“改变”时文字改变了。
我们可以发现,无论是加载布局的 Fragment 类中,还是静态加载 Fragment 的 Activity 中,都可以获得布局中的控件对象并使用。

静态加载基本上就讲的差不多了,现讲讲动态加载。
动态加载:撰写代码将 Fragment 添加到一个 Activity layout 中,
add( ):添加一个 Fragment(指定要添加的 fragment 和插入的 view),与此类似的还有 remove( ) 替换。
要完成 Fragment 的动态加载,需要处理一个 Fragment 事务,它会根据用户的交互情况,对 Fragment 进行添加、移除、替换以及运行动作,提交给 Activity 的每一套变化被称作一个事务。

在 layout 目录右键,新建一个 fragment 名字叫做 DongFragment。(步骤和前面的一样) 修改这个布局文件 fragment_dong.xml。
修改根节点,放入一个 TextView。

再修改加载这个布局的 Fragment 类。DongFragment。

最后,我们就直接在 MainActivity 中动态加载这个 Fragment。先修改 activity_main 。

可以发现我们也只是增加了一个< LinearLayout >……< /LinearLayout > 而已。

然后,修改 MainActivity。

现在运行项目,点击“动态加载”,就可以看见效果了。但是addToBackStack()这个方法我用手机测试没有效果,有兴趣的可以试试看是不是手机的问题。
关于 Fragment 的静态加载和动态加载基本上就讲完了。

**本博客仅用作学习讨论用,有错误的地方希望大家提出来,大家一起研究,本人也只是刚学习到这里而已,有写错的还请大家多多包涵。

更多相关文章

  1. Android(安卓)Glide图片加载框架介绍
  2. Android中自定义组合控件
  3. Android中Broadcast Receiver组件详解
  4. Android(安卓)StepView物流进度
  5. Android(安卓)弹性布局 FlexboxLayout(一) :flexDirection,flexWrap
  6. Android(安卓)Scollview嵌套Listview,Gridview数据显示不完全问
  7. 安卓namespace隔离机制
  8. libgdx中延迟加载资源文件
  9. android 解决listview.notifyDataSetChanged刷新时Imageloader加

随机推荐

  1. Android(安卓)SDK安装
  2. android事件处理机制
  3. Android(安卓)系统架构了解学习
  4. Android(Java):adb与linux命令
  5. 你不知道的Runnable接口,深度解析Runnable
  6. android tts 发声的例子
  7. Android(安卓)Accessibility(辅助功能)
  8. Android应用程序的快速启动是怎样炼成的?
  9. Android(安卓)Studio 单刷《第一行代码》
  10. Android模拟神器――Genymotion