Fragment
来源:互联网 发布:万网域名交易平台 编辑:程序博客网 时间:2024/06/06 20:00
第一次写博客
用的是markdown来写,因为第一次写博客也是第一次用markdown,可能格式上有点不习惯,请多见谅。我是在学校学习了一年Android的小白,今天开始看官方文档,打算一边看一边学,然后会把学习心得写到博客上。今天看得是片段,也就是Fragment。
为什么有Fragment
在官方文档上介绍说,是为了给大屏幕(如平板电脑)上更加动态和灵活的 UI 设计提供支持。由于平板电脑的屏幕比手机屏幕大得多,因此可用于组合和交换 UI 组件的空间更大。
怎么向Activity添加Fragment
布局
简单而言,首先得有一个Fragment的class,然后在布局本间中用name属性来把这个Fragment贴到Activity上。
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment android:name="com.example.news.ArticleListFragment" android:id="@+id/list" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" /> <fragment android:name="com.example.news.ArticleReaderFragment" android:id="@+id/viewer" android:layout_weight="2" android:layout_width="0dp" android:layout_height="match_parent" /></LinearLayout>
代码
开启Fragment事务-添加-提交。注意,官方文档中使用的是getFragmentManager,但是在实际开发中为了实现向下兼容要使用v4包的getSupportFragmentManager。
FragmentManager fragmentManager = getFragmentManager();FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();ExampleFragment fragment = new ExampleFragment();fragmentTransaction.add(R.id.fragment_container, fragment);fragmentTransaction.commit();
还有一点需要提到的是:如果在commit()前调用 addToBackStack(),就会事务保存到返回栈,以便用户能够通过按返回按钮撤消事务并回退到上一片段。
与Activity通信
需求:FragmentA继承于ListFragment,FragmentB是同一页面上的普通Fragment,点击FragmentA上了某一列,FragmentB转到相应的一页。
实现:
1. 在FragmentA中通过getActivity得到容器Activity,再通过getSupportFragmentManager得到FragmentB,然后在FragmentA的点击事件中设置FragmentB的数据。
2. 在FragmentA中设置一个接口(要强制让容器Activity实现这个接口,就要在onAttach中把容器Activity强转成接口,如果容器不实现接口就会报错 ClassCastException),把数据传递给容器Activity,然后在容器Activity中修改FragmentB数据。
官方文档中使用的是第二种方法。给我的感觉,第二种方法的好处是封装性好,易于管理。应该还有别的好处,但是以我当前的能力看不出来。
示例
在官方文档对Fragment介绍的末尾,还有一个小示例,我看了下,认为里面的思想,代码风格很值得学习。我就不把内容直接copy过来了,感兴趣可以自行去看。
- Fragment
- Fragment
- fragment
- Fragment
- Fragment
- Fragment
- Fragment
- fragment
- fragment
- Fragment
- Fragment
- fragment
- Fragment
- Fragment
- Fragment
- Fragment
- Fragment
- fragment
- 快速排序
- X264编码h264
- 有关Android截图与录屏功能的学习
- 命令行下过滤adb logcat的输出
- spring ThreadPoolTaskExecutor的线程池类实现多线程
- Fragment
- 简析ASP.NET WebApi的跨域签名
- css总结
- 在maven下搭建SSM开发框架
- SuperAgent使用简介
- 使用Qt画出直方图和分位数图
- 杭电ACM2026:首字母大写
- 自学Swift3.0
- Hive的基本操作