一.Fragment概要:

于Fragment经,布局更好地适应各种尺寸的android打电话,加方便的实现不同页面的切换,就不像曾经activity的跳转那样的麻烦了。能够在activity中嵌套不同的Fragment。每一个Fragment能够用不同的布局,能够动态的进行加入、替换,就像以下的图片一样:

 

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDcwODY2Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

二. Fragment的生命周期:

每一个Fragment都有自己生命周期。可是与activity的生命周期不全同样,Fragment额外的加入了5个生命周期回调方法。先看一下图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDcwODY2Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

这五个方法:

1.onAttach(Activity);  //当Activity与Fragment发生关联时调用。



2.onCreateView(LayoutInflater,ViewGroup,Bundle);  //创建该Fragment的视图



3.onActivityCreate(bundle);  //当Activity的onCreate()。方法返回时调用



4.onDestoryView();  //与onCreateView相相应,当改Fragment被移除时调用



5.onDetach();  //与onAttach()相相应,当Fragment与Activity的关联被取消时调用





注意:除了onCreateView。其它的全部方法假设你重写了,必须调用父类对于该方法的实现。

继承Fragment必须重写这种方法:

(2).onCreateView():

fragment第一次绘制它的用户界面的时候, 系统会调用此方法. 为了绘制fragment的UI,此方法必须返回一个View, 这个view就是你在fragment中实现的布局。不提供则返回null。

生命周期:

(1)第一次启动Fragment:

onAttach

onCreate

onCreateView

onActivityCreated

onStart

onResume

(2)切换到其它Fragment:

onPause

onStop

onDestroyView

(3)切换回来:

onCreateView

onActivityCreated

onStart

onResume

(4)返回手机桌面:

onPause

onStop

回到应用

onStart

onResume

(5)退出应用

onPause

onStop

onDestroyView

onDestroy

onDetach

三.动态的使用Fragment:

Fragment常常作为activity的界面的一部分,既然是一部分那么Fragment肯定会给activity用一个layout,也能够说是一个view。那么就要通过onCreateView返回activity一个layout,那么怎么返回呢?就要重写这种方法:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return super.onCreateView(inflater, container, savedInstanceState);
}

这里的三个參数第一个inflater不用说是用来获得布局文件的,第二个參数container就是将要插入的父ViewGroup,第三个提供恢复Fragment提供数据用的。

重写就要这样实现:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_1, container, false);
}

这样就能够把Fragment布局返回了。

四.实现開始的效果图:

主界面:

public class MainActivity extends Activity implements OnClickListener {
RelativeLayout r1;
RelativeLayout r2;
RelativeLayout r3;
RelativeLayout view = null; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.bottom_layout); r1 = (RelativeLayout) findViewById(R.id.layout1);
r2 = (RelativeLayout) findViewById(R.id.layout2);
r3 = (RelativeLayout) findViewById(R.id.layout3); r1.setOnClickListener(this);
r2.setOnClickListener(this);
r3.setOnClickListener(this);
setDefaultFragment();
} private void setDefaultFragment() {
FragmentManager fm = getFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
MyFragment my = new MyFragment();
transaction.replace(R.id.frame_layout1, my);
transaction.commit();
} @Override
public void onClick(View arg0) {
FragmentManager fm = getFragmentManager();
// 开启Fragment事务
FragmentTransaction transaction = fm.beginTransaction();
switch (arg0.getId()) {
case R.id.layout1:
if (view != null) {
view.setBackgroundResource(R.color.back_bg);
}
view = r1;
r1.setBackgroundResource(R.color.black_purple);
MyFragment my = new MyFragment();
transaction.replace(R.id.frame_layout1, my);
transaction.commit();
break;
case R.id.layout2:
if (view != null) {
view.setBackgroundResource(R.color.back_bg);
}
view = r2;
r2.setBackgroundResource(R.color.black_purple);
MyFragment2 my2 = new MyFragment2();
transaction.replace(R.id.frame_layout1, my2);
transaction.commit();
break;
case R.id.layout3:
if (view != null) {
view.setBackgroundResource(R.color.back_bg);
}
view = r3;
r3.setBackgroundResource(R.color.black_purple);
MyFragment3 my3 = new MyFragment3();
transaction.replace(R.id.frame_layout1, my3);
transaction.commit();
break;
} }
}

主界面布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" > <LinearLayout
android:id="@+id/linear_layout"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:layout_alignParentBottom="true"
android:background="#696969"
android:orientation="horizontal" > <RelativeLayout
android:id="@+id/layout1"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:background="@drawable/tab_bg" > <ImageView
android:id="@+id/image1"
android:layout_width="28dp"
android:layout_height="28dp"
android:layout_centerHorizontal="true"
android:layout_marginTop="5dp"
android:background="@drawable/ic_launcher" /> <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/image1"
android:layout_centerHorizontal="true"
android:text="音乐"
android:textSize="13sp" >
</TextView>
</RelativeLayout> <RelativeLayout
android:id="@+id/layout2"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:background="@drawable/tab_bg" > <ImageView
android:id="@+id/image2"
android:layout_width="28dp"
android:layout_height="28dp"
android:layout_centerHorizontal="true"
android:layout_marginTop="5dp"
android:background="@drawable/ic_launcher" /> <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/image2"
android:layout_centerHorizontal="true"
android:text="电影"
android:textSize="13sp" >
</TextView>
</RelativeLayout> <RelativeLayout
android:id="@+id/layout3"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:background="@drawable/tab_bg" > <ImageView
android:id="@+id/image3"
android:layout_width="28dp"
android:layout_height="28dp"
android:layout_centerHorizontal="true"
android:layout_marginTop="5dp"
android:background="@drawable/ic_launcher" /> <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/image3"
android:layout_centerHorizontal="true"
android:text="影视"
android:textSize="13sp" >
</TextView>
</RelativeLayout>
</LinearLayout> <FrameLayout
android:id="@+id/frame_layout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@id/linear_layout" >
</FrameLayout> </RelativeLayout>

Fragment实现:

public class MyFragment extends Fragment{

	@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_1, container, false);
} }

Fragment布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="第一个页面" /> </RelativeLayout>

另外两个Fragment和这个同样。

版权声明:本文博主原创文章,博客,未经同意不得转载。

android (12) Fragment使用的更多相关文章

  1. Android中Fragment和ViewPager那点事儿(仿微信APP)

    在之前的博文<Android中使用ViewPager实现屏幕页面切换和引导页效果实现>和<Android中Fragment的两种创建方式>以及<Android中Fragm ...

  2. Android中Fragment与Activity之间的交互(两种实现方式)

    (未给Fragment的布局设置BackGound) 之前关于Android中Fragment的概念以及创建方式,我专门写了一篇博文<Android中Fragment的两种创建方式>,就如 ...

  3. Android中Fragment的两种创建方式

    fragment是Activity中用户界面的一个行为或者是一部分.你可以在一个单独的Activity上把多个Fragment组合成为一个多区域的UI,并且可以在多个Activity中再使用.你可以认 ...

  4. Android之Fragment学习笔记①

    Android Fragment完全解析,关于碎片你所需知道的一切 一. 什么是FragmentFragment(碎片)就是小型的Activity,它是在Android3.0时出现的.Fragment ...

  5. Android之 Fragment

    什么是Fragment: Android是在Android 3.0 (API level 11)开始引入Fragment的. 可以把Fragment想成Activity中的模块,这个模块有自己的布局, ...

  6. [转]Android:Activity+Fragment及它们之间的数据交换(一)

    2014-05-18         来源:Android:Activity+Fragment及它们之间的数据交换(一)   简介: 为什么要用Fragment?使用Fragment可以在一个Acti ...

  7. Android:Activity+Fragment及它们之间的数据交换.

    Android:Activity+Fragment及它们之间的数据交换 关于Fragment与Fragment.Activity通信的四种方式 比较好一点的Activity+Fragment及它们之间 ...

  8. android之Fragment基础详解(一)

      一.Fragment的设计哲学 Android在3.0中引入了fragments的概念,主要目的是用在大屏幕设备上--例如平板电脑上,支持更加动态和灵活的UI设计.平板电脑的屏幕比手机的大得多,有 ...

  9. Android使用Fragment来实现ViewPager的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信

    以下内容为原创,转载请注明:http://www.cnblogs.com/tiantianbyconan/p/3364728.html 我前两天写过一篇博客<Android使用Fragment来 ...

  10. android之fragment的使用

    android中的fragment与html中的div很类似,下图中通过左边的按键可以控制右边的显示内容.右边的内容就是一个fragment,通过点击按键来控制fragment的实现. 工程目录 需要 ...

随机推荐

  1. python3 偏最小二乘法实现

    python3的sklearn库中有偏最小二乘法. 可以参见下面的库说明:http://scikit-learn.org/stable/modules/generated/sklearn.cross_ ...

  2. 如何把别人的原理图和pcb图建立一个完整的工程

    这里是我从网友那里下载的pcb图和原理图 我们怎么通过这两个文件建立一个完整的工程 我们选中pcb图文件,通过下面的操作,就可以导出pcb封装库: 同样的方法,我选中pcb图,然后用下面图的方法,就可 ...

  3. (最新)使用爬虫刷CSDN博客访问量——亲测有效

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 1.概述 前言:前两天刚写了第一篇博客https://blog.csdn.net/qq_41782425/article/deta ...

  4. pragma pack,字节对齐

    关于字节对齐 pragma pack 一. 测试代码: // packTest.cpp : Defines the entry point for the console application. / ...

  5. 【Codeforces Round #442 (Div. 2) D】Olya and Energy Drinks

    [链接] 我是链接,点我呀:) [题意] 给一张二维点格图,其中有一些点可以走,一些不可以走,你每次可以走1..k步,问你起点到终点的最短路. [题解] 不能之前访问过那个点就不访问了.->即k ...

  6. [React Intl] Use Webpack to Conditionally Include an Intl Polyfill for Older Browsers

    Some browsers, such as Safari < 10 & IE < 11, do not support the JavaScript Internationali ...

  7. android 5.x system.img 大于2G导致编译otapackage时报错怎样处理

    当system分区预制过多apk时假设img size超过2G 在make otapackage时会报例如以下错误  zipfile.LargeZipFile: Zipfile size would ...

  8. 使用wepy开发微信小程序商城第二篇:路由配置和页面结构

    使用wepy开发微信小程序商城 第二篇:路由配置和页面结构 前言: 最近公司在做一个微信小程序的项目,用的是类似于vue的wepy框架.我也借此机会学习和实践一下. 小程序官方文档:https://d ...

  9. java并发之生产者消费者模型

    生产者和消费者模型是操作系统中经典的同步问题.该问题最早由Dijkstra提出,用以演示它提出的信号量机制. 经典的生产者和消费者模型的描写叙述是:有一群生产者进程在生产产品.并将这些产品提供给消费者 ...

  10. Android学习笔记之GridView的使用具体解释

    (1)创建布局代码例如以下: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android&quo ...