什么是Fragment

Activity是整个看到的界面,而Activity则可以继续分割出多个Fragment. Fragment最初是为了在平板电脑充分利用空间,但是手机端也经常使用,主要目的是共用屏幕上某一块区域.
如下面一种界面,上面蓝色框是几个功能(推荐、应用、游戏等)共用的显示区域,当用户切换到不同的功能页时,就将共用显示区域内容替换为对应的功能Fragment.

使用单个Fragment样例

效果图:

手动创建Fragment

  1. 在工程目录中单击右键,选择“New>Fragment>Fragment(Blank)”

  2. 在窗口中设置Fragment名称,对应布局文件名称.

  3. 默认创建的Fragment有点复杂,简化后如下:

class BlankFragment : Fragment() {override fun onCreateView(        inflater: LayoutInflater,        container: ViewGroup?,        savedInstanceState: Bundle?): View? {return inflater.inflate(R.layout.fragment_blank, container, false)}}
  1. 在Activity对应布局文件中增加用于容纳Fragment布局容器
    修改activity_main.xml,添加一个FrameLayout,命名为containerLayout.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent">

<FrameLayoutandroid:id="@+id/containerLayout"android:layout_width="match_parent"android:layout_height="match_parent" />

LinearLayout>

在Activity中加载该Fragment

下面演示点击button1按钮时,从MainActivity跳转到Main2Activity

replaceFragment(BlankFragment(), R.id.containerLayout)

完整代码如下:

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)replaceFragment(BlankFragment(), R.id.containerLayout)}

private fun replaceFragment(fragment: Fragment, containerId: Int) =        supportFragmentManager.beginTransaction().replace(containerId, fragment).commit()}

使用多个Fragment样例

多个Fragment利用同一块区域进行内容展示,一般可以通过标签页进行切换.

效果图

加载第一个Fragment

加载第二个Fragment

创建第一个Fragment及对应布局文件

  • 第一个Fragment

class FirstFragment : Fragment() {override fun onCreateView(        inflater: LayoutInflater,        container: ViewGroup?,        savedInstanceState: Bundle?): View? {return inflater.inflate(R.layout.fragment_first, container, false)}}
  • 第一个Fragment对应布局:fragment_first.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent">

<TextView        android:layout_width="match_parent"        android:layout_height="match_parent"        android:text="第一个Fragment" />

</FrameLayout>

创建第二个Fragment及对应布局文件

  • 第二个Fragment

class SecondFragment : Fragment() {override fun onCreateView(        inflater: LayoutInflater,        container: ViewGroup?,        savedInstanceState: Bundle?): View? {return inflater.inflate(R.layout.fragment_second, container, false)}}
  • 第二个Fragment对应布局:fragment_second.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent">

<TextView        android:layout_width="match_parent"        android:layout_height="match_parent"        android:text="第二个Fragment" />

</FrameLayout>

修改Activity对应的布局文件,展示两个底部标签.

下面代码中id为bottomLayout的布局,里面放了两个标签,用来点击切换页面上部containerLayout中的内容.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical">

<FrameLayoutandroid:id="@+id/containerLayout"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_above="@+id/bottomLayout" />

<LinearLayoutandroid:id="@+id/bottomLayout"android:layout_width="match_parent"android:layout_height="50dp"android:layout_alignParentBottom="true"android:background="#F8F8F8">

<TextViewandroid:id="@+id/page1Tv"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_weight="1"android:gravity="center"android:text="标签页1" />

<Viewandroid:layout_width="1px"android:layout_height="match_parent"android:background="#E7E7E7" />

<TextViewandroid:id="@+id/page2Tv"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_weight="1"android:gravity="center"android:text="标签页2" />LinearLayout>RelativeLayout>

Activity代码中做Fragment加载及切换

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)//默认加载第一个FragmentreplaceFragment(FirstFragment(), R.id.containerLayout)//对page1Tv控件添加点击事件,点击后切换至FirstFragment        page1Tv.setOnClickListener { replaceFragment(FirstFragment(), R.id.containerLayout) }//对page2Tv控件添加点击事件,点击后切换至SecondFragment        page2Tv.setOnClickListener { replaceFragment(SecondFragment(), R.id.containerLayout) }}

private fun replaceFragment(fragment: Fragment, containerId: Int) =        supportFragmentManager.beginTransaction().replace(containerId, fragment).commit()}

完整源代码

https://gitee.com/cxyzy1/fragmentDemo

activity中获取fragment布局_安卓开发入门教程Fragment相关推荐

  1. 安卓开发入门教程-Fragment

    什么是Fragment Activity是整个看到的界面,而Activity则可以继续分割出多个Fragment. Fragment最初是为了在平板电脑充分利用空间,但是手机端也经常使用,主要目的是共 ...

  2. android 获取控件高度_安卓开发入门教程UI控件_ProgressBar

    什么是ProgressBar ProgressBar是用于提示用户进行等待的UI控件,. 基础样例 1.loading图 效果图 代码 布局文件代码 <ProgressBarandroid:id ...

  3. android 获取控件高度_安卓开发入门教程UI控件_ImageView

    什么是ImageView ImageView是用于显示图片的UI控件. 基础样例 1.展示本地图片 效果图 代码 <ImageViewandroid:layout_width="wra ...

  4. 安卓开发入门教程-UI控件_EditText

    什么是EditText EditText是用于进行文本输入的UI控件. 基础样例 1.普通输入 效果图 代码 <EditTextandroid:layout_width="wrap_c ...

  5. 安卓开发入门教程!终于有人把安卓程序员必学知识点全整理出来了,附答案

    如何提升学习? 提升学习很大程度上就是为了跳槽涨薪,当然运气不好的情况可能是被劝退重新找工作,无论是哪种情况,自主学习的能力是要有的,而且得有一个方向,得有重点. 对于Android移动开发来说,热修 ...

  6. 安卓开发入门教程-安装开发工具(Android Studio)

    本文简介 搭建Android Studio安卓开发环境. 目标用户 安卓初学者 操作步骤 一.下载Android Studio 下载迅雷加速下载(网速快的,直接略过本步骤).预计耗时:1分钟 在浏览器 ...

  7. css中的单位换算_金蝶ERP入门教程:动态换算率及辅助计量单位的应用

    金蝶ERP入门教程:动态换算率及辅助计量单位的应用 关注我,我将定期分享更多的ERP解决方案 如果您喜欢且觉得内容有用,请点击分享转发 如果你有什么关于ERP系统的问题和疑问,可私信联系我 大家好,我 ...

  8. 安卓开发入门教程!安卓Apk安装过程,源码+原理+手写框架

    首先,讲讲为什么我们要讲JAVA的语言进阶,从整体来讲,Java和Android的区别在于Android程序是基于组件和配置的,而且Android开发以Java语言为开发工具,表面上看他们有点同宗不同 ...

  9. 安卓开发入门教程-通过WebView打开网页

    什么是WebView WebView是用来打开网页的一种UI控件,可以在App内跳转到指定网址,而不是采用系统浏览器打开网页. 基础样例 效果图 实现方案 activity class MainAct ...

最新文章

  1. cass插件_南方CASS专题系列,全套教程+视频讲解+插件汇总,全部打包速带走
  2. 满洲里市智慧教育建设跨入云时代
  3. 关于Installshield里一些常见问题的解答—艾泽拉斯之海洋女神出品
  4. mysql中文时好时坏_mysql索引的问题,时好时坏
  5. Nginx静态资源盗链的效果展示
  6. JQuery之编写弹窗
  7. html页面音乐播放器_Embed代码
  8. 和氟西汀类似的备注_撒狗粮:可爱又霸气的给男朋友的微信备注
  9. 64位处理器_快看看你的电脑是64位还是32位操作系统,处理器支持64位可升级
  10. 动态语言会淘汰静态语言吗?
  11. python中superclass是什么_Python中super()函数简介及用法分享
  12. 计算机软件领域经典图书推荐
  13. Rational Rose工具栏中没有参与者工具(小人图标)的解决方法
  14. 怎么把淘宝宝贝分享到微信朋友圈
  15. Java课程设计学生考勤管理
  16. 《Web全栈工程师的自我修养》读后感
  17. 如何将局域网IP映射为公网IP
  18. photoshop颈纹去除
  19. 微信公众平台开发__导航
  20. linux下安装nginx出错,Ubuntu安装Nginx服务器出错解决

热门文章

  1. KafkaConsumer.poll : Timeout must not be negative
  2. 【linux系统编程】基础开发工具:yum
  3. IDEA 2021.1正式发布,新增了这几个超实用功能!
  4. 骚操作,简单修改源码,让你的postman自动生成POJO代码
  5. MySQL中的这17个关键问题,一定要弄清楚!
  6. oracle 解释计划权限,ACL的使用:主机权限规划管理--Oracle脚本
  7. idea常用快捷键和设置
  8. Spring框架----四种常用通知类型
  9. java架构之-负载均衡-Ribbon 的使用
  10. T-SQL 视图 事物 备份还原 分离附加