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. AndroidStudio 生成Jar并混淆
  2. 执行游戏时出现0xc000007b错误的解决方法
  3. 从mysql的官网下载tar.gz结尾的mysql
  4. NET Core中使用Irony实现自己的查询语言语法解析器
  5. 如何设计安全的用户登录功能
  6. 为什么TCP是三次握手
  7. 仿形靠模的计算机设计方法,仿形靠模的计算机设计方法.pdf
  8. 视频工作者应该知道的几个网站
  9. python虚拟环境搭建learning_log_vscode Python 虚拟环境搭建
  10. html原生ajax
  11. 世界第4疯狂的科学家,在103岁生日那天去世了
  12. 手绘图形识别方法(算法)
  13. python win32gui模块详解_Python笔记_第二篇_面向过程_第二部分_4.常用模块的简单使用_窗体控制模块(win32con、win32gui)...
  14. IOS生物信息验证(Touch IDFace ID)
  15. 怎样把一张图片插入到CAD图纸中呢?
  16. 【Unity开发】随手记:点击屏幕选中物体
  17. 【考研英语语法】介词短语
  18. python中的调试器dbg
  19. 移动硬盘故障损坏照片怎么恢复
  20. 功率单位mw和dbm换算

热门文章

  1. 基于route-map的策略路由
  2. 央行发布声纹识别安全应用技术标准,适用手机银行、第三方支付
  3. 英特尔玩VR有多认真?看看Project Alloy的细节就知道了
  4. Jenkins小坑之执行Shell
  5. 17.1 MySQL主从介绍;17.2 准备工作;17.3 配置主;17.4 配置从;17.5 测试主从同步...
  6. 架构师速成8.3-可用性之分库分表
  7. context:component-scan标签的use-default-filters属性的作用以及原理分析
  8. Hadoop系列之九:Hadoop集群伪分布式模式的实现详解
  9. [转载] 晓说——第23期:大师照亮八十年代
  10. UIViewController内存管理