Fragment多用于平板中,Fragment当成Activity的一个界面的一个组成部分,Fragment有自己的生命周期,但是必须依托在Activity中。

参考链接

https://developer.android.com/guide/components/fragments.html?hl=zh-cn

Fragment 生命周期如下

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.example.fragmenttest.MainActivity"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Buttonandroid:id="@+id/button1"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Fragment 1" /><Buttonandroid:id="@+id/button2"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Fragment 2" /><FrameLayoutandroid:id="@+id/fragment_place"android:layout_width="match_parent"android:layout_height="match_parent"></FrameLayout></LinearLayout></RelativeLayout>

效果图如下:

创建Fragment1

Fragment1.java

package com.example.fragmenttest;import android.app.Fragment;
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;public class Fragment1 extends Fragment {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// Inflate the layout for this fragmentreturn inflater.inflate(R.layout.fragment_fragment1, container, false);}
}

Fragment1布局

fragment_fragment1.xml

<FrameLayout 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="com.example.fragmenttest.Fragment1"><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:text="fragment 1" /></FrameLayout>

创建Fragment

Fragment2.java

package com.example.fragmenttest;import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;public class Fragment2 extends Fragment {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// Inflate the layout for this fragmentreturn inflater.inflate(R.layout.fragment_fragment2, container, false);}
}

fragment_fragment2.xml

<FrameLayout 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="com.example.fragmenttest.Fragment2"><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:text="fragment 2" /></FrameLayout>

MainActivity.java

package com.example.fragmenttest;import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;public class MainActivity extends AppCompatActivity {Button btn1, btn2;Fragment fr;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn1 = (Button) findViewById(R.id.button1);btn2 = (Button) findViewById(R.id.button2);btn1.setOnClickListener(listener);btn2.setOnClickListener(listener);}View.OnClickListener listener = new View.OnClickListener() {@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.button1:fr = new Fragment1();break;case R.id.button2:fr = new Fragment2();break;}FragmentManager fm = getFragmentManager();FragmentTransaction fragmentTransaction = fm.beginTransaction();// 将activity_main中的fragment转换成fragment1或者fragment2fragmentTransaction.replace(R.id.fragment_place, fr);fragmentTransaction.commit();}};}

管理fragment需要使用FragmentManager.使用getFragmentManager()获得。

操作fragemnt需要使用FragmentTransaction的api。使用beginTransaction()获得。

在用replace函数替换fragment.

应用到 Activity,您必须调用 commit()

运行情况,点击button1

点击button2

Activity通信

片段可以通过 getActivity() 访问 Activity 实例,并轻松地执行在 Activity 布局中查找视图等任务。

View listView = getActivity().findViewById(R.id.list);

Activity 也可以使用 findFragmentById() 或 findFragmentByTag(),通过从 FragmentManager 获取对 Fragment 的引用来调用片段中的方法。例如:

ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);

Tony Liu

2017-3-14, Shenzhen

android Fragment 笔记相关推荐

  1. Android学习笔记-recreate()方法导致fragment重复新建的问题,解决方法

    Android学习笔记-recreate()方法导致fragment重复新建的问题,解决方法 今天修改一个比较奇怪的bug: 在操作一个事件的时候,使用eventbus来监听事件,断点发现有时候是会执 ...

  2. Android编程权威指南笔记3:Android Fragment讲解与Android Studio中的依赖关系,如何添加依赖关系

    Android Fragment 当我在学习时,了解了Fragment词汇 Fragment是一种控制器对象,我就把所了解的简单说一下.activity可以派fragment完成一些任务,就是管理用户 ...

  3. Android Fragment使用(三) Activity, Fragment, WebView的状态保存和恢复

    Android中的状态保存和恢复 Android中的状态保存和恢复, 包括Activity和Fragment以及其中View的状态处理. Activity的状态除了其中的View和Fragment的状 ...

  4. Android学习笔记:TabHost 和 FragmentTabHost

    2019独角兽企业重金招聘Python工程师标准>>> Android学习笔记:TabHost 和 FragmentTabHostTabHost命名空间:android.widget ...

  5. Android学习笔记:TabHost 和 FragmentTabHost(转)

    Android学习笔记:TabHost 和 FragmentTabHost(转) 转自:http://www.cnblogs.com/asion/p/3339313.html 作者:Asion Tan ...

  6. Android开发笔记(序)写在前面的目录

    知识点分类 一方面写写自己走过的弯路掉进去的坑,避免以后再犯:另一方面希望通过分享自己的经验教训,与网友互相切磋,从而去芜存菁进一步提升自己的水平.因此博主就想,入门的东西咱就不写了,人不能老停留在入 ...

  7. Android开发笔记(一百七十二)第二代翻页视图ViewPager2

    正如RecyclerView横空出世取代ListView和GridView那样,Android也推出了二代翻页视图ViewPager2,打算替换原来的翻页视图ViewPager.与ViewPager相 ...

  8. Android开发笔记(一百六十九)利用BottomNavigationView实现底部标签栏

    在Android Studio上创建官方默认的首屏标签页面很方便,首先右击需要添加标签栏的模块,在弹出的右键菜单中依次选择"New"--"Activity"-- ...

  9. Android开发笔记(一百四十七)标签布局TabLayout

    标签布局TabLayout是MaterialDesign库中的一个新控件,常与工具栏Toolbar搭配使用.大家平时常用的App就有不少采用了TabLayout,比如京东App的商品页,从左到右依次是 ...

最新文章

  1. 【Silverlight5矢量打印】如何用C#代码检测打印机和驱动是否支持PostScript
  2. 计算机能够进行逻辑操作的部件是,第二章 计算机逻辑部件
  3. pl/sql实现打印九九乘法表
  4. leetcode 20. 有效的括号
  5. python工作目录,如何使用python 3获取当前工作目录?
  6. 蚂蚁金服CTO程立:金融级分布式交易的技术路径
  7. linux所有内存监控,流量监控?负载监控?内存监控?IO监控?check_linux_stats全部替你搞定!...
  8. 注册键值的根路径无效_mybatis mapper 接口注册流程源码解析
  9. popen和pclose
  10. mysql临时表更新_MySql 临时表
  11. 【测试】你的浏览器HOLD住HTML5吗?
  12. Linux SSH 远程登录错误解决办法 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
  13. 【Java毕设】基于SpringBoot实现新冠疫情统计系统(Idea+Navicat)
  14. 融合通信无人值守系统解决方案
  15. 隐藏tab标签完美解决办法
  16. keep sb updated_keep you update 和keep you updated哪个正确
  17. vue项目生成微信支付二维码(web端),其他二维码也可以生成
  18. MySQL:日期和时间函数
  19. [转载]惯性导航专业相关书籍180多部
  20. 2021第7届中国大学生程序设计竞赛CCPC广州站, 签到题4题

热门文章

  1. 可变参数函数的一个简单例子
  2. javaSE----for,wile ,do while循环的应用
  3. leetcode 338 比特位计数
  4. KVM虚拟机openVSwitch杂记(2)
  5. Java魔法堂:注解用法详解——@SuppressWarnings(转)
  6. zabbix items复制
  7. 程序员如何从0到1搭建自己的技术博客
  8. 减小VirtualBox虚拟硬盘文件的大小
  9. Python[8] :paramiko模块多进程批量管理主机
  10. 一学就会之ado.net(一)