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过来了,感兴趣可以自行去看。

0 0
原创粉丝点击