使用Fragment

  • Fragment的介绍
  • Fragment的生命周期
  • 创建Fragment
  • 在Activity中添加Fragment
  • 实例——川菜菜谱

Fragment的介绍

Fragment(碎片)是一种嵌入在Activity中的UI片段,它可以用来描述Activity中的一部分布局。如果Activity界面布局中的控件比较多比较复杂,那么Activity管理起来就比较麻烦,我们可以使用Fragment把屏幕划分成几个片段,进行模块化的管理,从而使程序更加合理和充分地利用的空间。

Fragment的生命周期

Activity生命周期中有5中状态,分别是启动状态、运行状态、暂停状态、停止状态和销毁状态。

因为Fragment是被嵌入到Activity中使用的,因此它的生命周期的状态是直接受其所属Activity的生命周期状态影响。


Fragment生命周期与Activity的生命周期十分相似。Fragment生命周期比Activity多了以下几个方法,具体如下:

  • onAttach():Fragment和Activity建立关联时调用
  • onCreateView():Fragment创造视图时调用
  • onActivityCreate():Fragment相关联的Activity已经创建完成时调用
  • onDestroyView():Fragment关联的视图被移除时调用
  • onDetach():Fragment和Activity解除关联时调用

创建Fragment

public class NewsListFragment extends Fragment{public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){View v = inflater.inflate(R.layout.fragment,container,false);return v;}
}

上述代码重写了Fragment和onCreateView()方法,并在该方法中通过LayoutInflater的inflate()方法将布局文件fragment.xml动态加载Fragment中

在Activity中添加Fragment

Fragment创建完成后并不能单独使用,还需要将Fragment添加到Activity中。在Activity中添加Fragment有两种方式:

  1. 在布局文件中添加Fragment
    在Activity引用的布局文件中添加Fragment时,需要使用标签,该标签与其他控件的标签类似,但必须指定android:name属性,其属性值为Fragment的全路径名称。在LinearLayout布局中添加NewListFragment代码:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
>
<fragmentandroid:name="cn.itcast.NewListFragment"android:id="@+id/newslist"android:layout_width="match_parent"android:layout_height="match_parent"/>
</LinearLayout>
  1. 在Activity中动态加载Fragment

当Activity运行时,也可以将Fragment动态添加到Activity中,具体步骤如下:

(1)创建一个Fragment的实例对象
(2)获取FragmentManager的实例
(3)开启FragmentTransaction
(4)向Activity的布局容器中添加Fragment
(5)通过commit()方法提交事务

在Activity中添加Fragment的代码如下:

public class MainActivity extends Activity{protected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);NewsListFragment fragment = new NewsListFragment();//实例化Fragment对象FragmentManager fm = getFragmentManager();//获取FragmentManager实例FragmentTransaction beginTransaction = fm.beginTransaction();//开启FragmentTransactionbeginTransaction.replace(R.id.ll,fragment);//添加一个FragmentbeginTransaction.commit();//提交事务}
}

实例——川菜菜谱

  1. 创建工程
    创建一个名为SichuanCuisine的应用程序

  2. 放置界面控件

  3. 放置界面控件

  4. 创建两个Fragment的布局文件

  5. 创建川菜列表Item界面

  6. 创建ContentFragment

ContentFragment类继承自Fragment,在该类中获取界面控件并将菜品做法的数据显示在控件上
通过setText()方法将获取的Activity中设置的菜品做法数据信息显示到界面控件上,创建一个initView()方法,在该方法中获取菜品做法信息的控件

  1. 创建MenuFragment


    MenuFragment类继承自Fragment,在该类中实现显示川菜列表的信息,点击列表Item,在界面右侧会出现对应菜品的做法信息
    通过setOnItemClickListener()方法为列表中的Item添加点击事件的监听器,在该监听器中重写onItemClick()方法,在onItemClick()方法中首先通过getActivity()方法获取Activity的实例对象,接着通过该对象的getFragmentManager()方法获取FragmentManager的实例对象,最后通过findFragmentById()方法获取到ContentFragment对象listFragment,并调用setText()方法设置点击的Item对应的菜品做法信息
  2. 编写MAinActivity


    在MAinActivity中将MenuFragment与ContentFragment添加到MAinActivity界面上
    通过replace()方法将ContentFragment和MenuFragment添加到对应的布局中

使用Fragment相关推荐

  1. Fragment之间传递数据的方式

    1.直接调用另一个Fragent对象的方法,两个Fragment之间高度耦合 2.采取接口回调的方式进行数据传递.即在一个fragment中创建一接口以及接口对应的set方法,在另一个fagment中 ...

  2. Android Fragment 调用宿主Activity 里面的方法

    方法 1 : 直接在Fragment 写 MainActivity main = (MainActivity) getActivity();main.xx; // xx 是 MainActivity ...

  3. java.lang.IllegalArgumentException: No view found for id 0x7f07005f (xx) for for fragment xxFragment

    问题的原因的是自己修改id 的时候弄错了修改下id 就好了 我的是用activity 加载fragment 使用的地方如下 ,确定下面的id 是否在布局中 transaction.add(R.id.c ...

  4. overridePendingTransition 方法在Fragment 中使用

    overridePendingTransition  方法在直接卸载Fragment 中无法识别 这个使用可以在前面添加getActivity 即可使用了 getActivity().override ...

  5. Fragment 使用 replace 的方式实现切换 以及切换的时候Fragment 生命周期

    这个主要代码在activity里面 如下 public class ReplaceActivity extends AppCompatActivity implements View.OnClickL ...

  6. Fragment 使用 show 和 hide 的方式实现切换 以及切换的时候Fragment 生命周期

    实现的效果如下图 主要的代码在activity 这里贴出来了 public class ShowActvity extends AppCompatActivity implements View.On ...

  7. ViewPager与Fragment结合使用,以及切换的时候Fragment 的生命周期

    下面要做的效果图下图 首先我们创建一个适配器如下 public class FraPagerAdapter extends FragmentPagerAdapter {private List< ...

  8. Activity 数据传递给Fragment

    下面说的宿主Activity 里面的Fragment 加入现在Fragment 里面 想使用Activity 里面的城市id 方法 1 使用set值 在Fragment 里面写一个set方法 在act ...

  9. Fragment 之间传递数据

    关于Fragment 之间的跳转这里就不再说了 有兴趣的可以看我的这边博客 Fragment 跳转 ,,,点击查看把 Fragment 跳转首先先跳转到宿主的Activity 上 这里以在同一个Act ...

  10. Tablayout 多个界面使用一个fragment 的实例

    这个主要还是adapter 里面 添加list 就行了 这里直接上代码吧 ,我刚写的demo 看的时候看adapter 就行了 布局代码: <?xml version="1.0&quo ...

最新文章

  1. append 换行_代码风格:答应我,让括号换行吧!!
  2. 160804、oracle查询:取出每组中的第一条记录
  3. 2018-03-02 GNUtls 对 TPM1.2 的原生支持
  4. scala 写入文件_Scala文件IO –写入文件,读取文件
  5. Atitit mybatis prblm n solu v1 u55 目录 1.1. 加载任意文职cfg 1 1.2. 根据dburl获取factory 1 1.3. Load any mapper
  6. python如何获取免费的可以商用的字体
  7. 参数整定类毕业论文文献有哪些?
  8. 沙盒生存游戏:打造世界Craft the World Mac中文版
  9. win10c盘扩容_如何给磁盘进行扩容/拆分/合并的操作?保姆级教学
  10. JAVA中获取文件MD5值的四种方法
  11. 谷歌AdMob广告接入(插屏广告)
  12. 阿里云RPA(机器人流程自动化)干货系列之五:业务流程梳理方法...
  13. 洁净厂房洁净度等级SICOLAB
  14. Pulling 1 repository Exception caught during execution of merge command
  15. MATLAB 2016a系统错误解决方案
  16. 计算机中的英语六级作文万能模板,英语六级作文的通用万能模板
  17. Protein Ising Model Problem
  18. 疯狂天才乔治·霍兹:17岁黑掉苹果,22岁搞垮索尼,还是特斯拉、谷歌最可怕的对手!...
  19. 柴油闪点不合格的原因
  20. 在 ASP.NET Core 中上传文件

热门文章

  1. [蓝桥杯]圆周率(Python)
  2. 网卡唤醒BIOS设置不完全教程
  3. 大工计算机学院博士答辩要求,大连理工大学博士毕业论文要求和发表
  4. 高效软件定时器的设计
  5. Java是一种强类型语言
  6. turtle简单绘图
  7. 【VScode】搜索栏语法
  8. MN316_OPEN(NBIOT)物联网模块环境搭建
  9. python判断是否是闰年!
  10. [Vs提示:不允许使用不完整类型]使用结构体常犯的错误