`
jguangyou
  • 浏览: 369029 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android Fragment基础

 
阅读更多

 创建一个Fragment

         如果要创建一个Fragment,必须创建一个Fragment的子类(或者已经存在的子类)。一个Fragment看起来像一个activity。它包括和activity相似的回调方法,例如 onCreate(), onStart(), onPause(), and onStop()。

        实时上,如果你要使用fragment转化一个已经存在的Android应用,你也许只要简单的将activity中回调函数中的代码复制到fragment的回调方法中。

       一般情况下,你应该实现至少以下几种方法:

       onCreate()

                创建fragment的时候系统会调用这个方法。在你的实现中,你可以进行一些初始化工作。

      onCreateView()

                当fragment首次要draw 他自己的用户界面的时候,系统会调用这个方法。这个方法必须返回一个  View,这个veiw也就是fragment的根布局。如果这个fragment不提供UI,你可以返回null。

      onPause()

               当用户离开这个fragment的时候,会首先调用这个方法。

       一般情况下大多数程序都会实现这三个方法,但是还有几个其他的回调方法,他们用来处理fragment生命周期的各个阶段。

      当然,你也可以继承一些Fragment已经存在的子类来代替继承Fragment类:

      DialogFragment

      ListFragment

      PreferenceFragment

  •   添加一个用户界面

        为fragment供一个布局,你必须实现onCreateView()   回调方法,当fragment要显示界面的时候会调用这个方法,然后这个方法必须返回一个View对象。

       如果你的fragment是 ListFragment 的子类,onCreatView()默认情况下会返回一个 ListView 类的对象,所以,你没有必要去实现它。

      例子:

     

public static class ExampleFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
         Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.example_fragment, container, false);
    }
}

    这有有一点需要说明的,那就是inflate(int resource, ViewGroup root, boolean attachToRoot)方法的三个参数。

  1. 第一个参数代表的是一个资源的id,也就是代表你即将inflate的资源文件。
  2. 第二个参数是你需要将inflate的视图添加到的Viewgroup,在上面的例子中是把R.layout.example_fragment inflate后代表的视图添加到container中。
  3. 第三个参数表示是否把inflate的视图添加到container中,如果是false,代表不添加到container中,只是返回一个视图和视图的layoutparams,如果是true,代表会添加到container中去。

   

  •   添加一个Fragment到activity中

        一般情况下,一个fragment为一个activity贡献了一部风UI,他会嵌入一个activity中作为其中的一部分。有两种方法江一个fragment添加到一个activity中:

         在activity的layout文件中声明fragment

        在这种情况下,你可以为这个fragment指定布局属性,就像一个普通的view一样。例如:

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <fragment android:name="com.example.news.ArticleListFragment"
            android:id="@+id/list"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="match_parent" />
    <fragment android:name="com.example.news.ArticleReaderFragment"
            android:id="@+id/viewer"
            android:layout_weight="2"
            android:layout_width="0dp"
            android:layout_height="match_parent" />
</LinearLayout>

 

 

         通过代码方式添加fragment

         在你activity运行的任何时间内,你可以添加fragments到你的activity的布局中,你只需要指定一个 ViewGroup 用来放置fragment。

         为了在activity中进行事务管理(例如 add,remove,or replace 一个fragment),你必须使用FragmentTransaction.你可以从activity中获取一个 FragmentTransaction 的实例,例如:

FragmentManager fragmentManager = getFragmentManager()
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

 然后你就可以使用 add() 方法,添加一个fragment到一个activity布局中。

 

ExampleFragment fragment = new ExampleFragment();
fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.commit();
  •  添加一个没有UI的fragment

       上面的例子展示了如何江一个fragment的界面添加到activity的布局中。但是,你也可以使用一个后台的fragment,也就是说他没有界面。

       添加一个没有UI的fragment会使用add(Fragment, String) 方法,因为他不是一个界面。所以只能是用tag作为唯一标识。

  • 管理fragments

        在activity中管理fragments,你需要用到FragmentManager. ,在activity中通过getFragmentManager()来获取它。

        通过FragmentManager. 你可以做的事情包括:

  •  获取activity中包含的fragments,通过方法 findFragmentById() 或者 findFragmentByTag() 
  • 使用popBackStack (),使Fragmnet出栈操作,类似用户按回退键。
  • 注册一个back Stack change事件监听,方法为addOnBackStackChangedListener().

 

 

  • Fragment事务

       在你的activity中,你可以增加、移除、替换fragment。你提交的没一组变换都叫一个事务(transaction),你需要用到 FragmentTransaction. 你还可以保存每一个事务到一个栈中,这个栈是于activity管理的。你可以从FragmentManager中获取一个 FragmentTransaction 的实例,例如:

FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

 每个事务就是你想同时进行的一系列的变化,你可以进行所有你想进行的变化,例如 add(), remove(), and replace().完成以后你必须调用commit().来提交事务。证明这个事务完成。    

 

 

         在你调用commit()方法前,你可以调用addToBackStack(), 目的是把这个事务添加到一个栈中。这个栈是有activity来管理的,他允许你返回上一个fragmeng的状态,你只要按返回按钮就可以。

 

  • 和activity进行交互

         虽然Fragment是不依赖activity而独立实现的,并且可以在多个activity中使用,但是,一个Fragment的对象还是和包含他的actvity有绑定关系的。

        特别需要指出的就是,fragment可以通过 getActivity() 来访问activity实例,并很容易执行一些操作,例如查找一个视图在activity的layout中:

      

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

        同样,你的activity也可以通过FragmentManager  的 findFragmentById() or findFragmentByTag(). 来获取一个Fragment对象,例如:

 

 

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

 

         actvity向Fragment传递数据:

         activity像Fragment传递数据的方法通过在Actvity中创建Bundle数据包,并调用Fragment的setArguments方法即可将数据传递给Fragment,例如:

FragmentB fragmentB = new FragmentB();
Bundle bundle = new Bundle();
bundle.putString("fragmentTest", "the data is passed in by activity");
fragmentB.setArguments(bundle);
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.add(R.id.ln1,fragmentB, "fragmentB");
transaction.commit();

 在Fragment中,就可以调用getArguments()获取参数。

          Fragment向activity传递参数

          在fragement中定义一个回调接口,再让包含Fragment的activity实现该接口,这样Fragment即可以调用该回调方法将数据传递给activity。

分享到:
评论

相关推荐

    Android Fragment超详细教程

    一、Android Fragment 的基础知识介绍 1.1 概述 1.2 范例 二、Android Fragment 示例讲解一 2.1 创建 Fragment 2.2 Fragment 管理 2.3 Fragment 与 Activity 通讯 2.4 Fragment 示例 三、Android ...

    Android Fragment从零开始

    一、Android Fragment 的基础知识介绍 1.1 概述 1.2 范例 二、Android Fragment示例讲解一 2.1 创建Fragment 2.2 Fragment 管理 2.3 Fragment 与Activity 通讯 2.4 Fragment 示例 三、Android Fragment示例讲解...

    Android Fragment之间的切换

    本文主要供学习使用,主要讲解点击不同按钮之后,相应Fragment之间的切换。类似的这种实例,在开发中经常用到,网上也有很多比较好的开源Demo,写的很详细。我当时也是用过其中的某些...为以后更复杂的开发打好基础。

    Android登录注册以及数据库、Fragment的使用、Listview的使用

    登录注册等都是用Android内置的小型数据库,登录进去是Fragment页面,底部也有动态的变化,是通过WIFI将传感器获取的数据动态的加载进内置数据库中,然后使用了ListView动态数据加载也可以通过App控制传感器的变化等...

    Android Studio Fragment 示例

    谷歌官方示例,training中关于fragment的基础介绍,实现的是依据屏幕的大小显示不同的fragment:小屏幕同时只显示一个fragment;大屏幕两个一同显示。原版为esclipe版本的project,已转换为AS可用的,target version...

    android中fragment的基础使用

    Fragment是为了解决不同屏幕分辩率的动态和灵活UI设计,本案例实现了简单创建案例的方法

    Android的Fragment实现Tab切换

    之前做项目零基础开始了Android开发,期间用到了Fragment的Tab切换功能,但网上好多帖子甚至代码都有点错误,于是我自己写了一个,希望能帮助到大家

    android fragment切换防止destroy

    最基础的activity内嵌fragment,实现fragment切换,并利用fragment的hide和show防止fragment不断的被销毁和重建,虽然很简单,但是很实用

    Android控件ViewPager与Fragment基础用法

    NULL 博文链接:https://hzy3774.iteye.com/blog/2199942

    《Android移动应用基础教程》之川菜菜谱

    fragment_menu.xml代码: fragment_content.xml代码: item_list.xml代码: activity_main.xml代码: package com.itcast.a4_6; import android.app.Activity; import android.app.FragmentTransaction; ...

    Android基础编程-Fragment介绍.pptx

    Android基础编程

    ANDROID移动开发基础案例教程

    ANDROID移动开发基础案例教程,黑马程序员。人民邮电出版社。本书从初学者的角度出发,采用案例驱动式教学方法,对Android基础知识进行讲解。...第10章主要讲解Android开发中的高级知识,包括多媒体、动画、Fragment等。

    fragment的基础使用方法

    关于Fragment的动态替换使用实例,非常适合初学者。

    Android.UI基础教程]

    第1部分AndroidUI基础 第1章 入门 1.1 HeUoWorld 1.2 Android应用程序的基本结构 1.2.1文件夹结构 1. 2.2.AndroidManifest 1.2.3 资源 1.3 AndroidUI基础 1.3.1 主屏幕和通知栏1.3.2 XM[布局 1.3.3 ACTIVI'[Y类 ...

    Android Fragment(动态,静态)碎片详解及总结

    一.Fragment的相关概念(一)Fragment的基础知识  Fragment是Android3.0新增的概念,中文意思是碎片,它与Activity十分相似,用来在一个 Activity中描述一些行为或一部分用户界面.使用多个Fragment可以在一个单独的...

    Android使用Scroll+Fragment仿京东分类效果

    实现思路:首先说下布局,整个是一个横向的线性布局,左边是一个ScrollView,右边是一个FrameLayout,在代码中动态向ScrollView中添加TextView,然后根据TextView的点击事件使用Fragment替换FrameLayout 首先看下布局:...

    详解Android studio 动态fragment的用法

    fragment的使用时Android的基础,它有两种用法,第一个就是静态的fragment。第二个则是动态的fragment。 静态fragment直接在layout创建你想要的fragment的XML的文件,然后在你的Java包里面创建对应fragment的class...

    Android基础-3(Fragment)

    Fragment的简单使用 http://blog.csdn.net/hucblog/article/details/19081927

    android Fragment底部菜单代码生成器(Version 0.1)-64位

    Fragment底部菜单代码生成器(Version 0.1)-64位 你还在手写基础的代码吗?落伍了,效率低下。用软件生成吧。轻松简单。

    Android Fragment监听返回键的一种合理方式

    小罗心想,反正Activity提供了onBackPressed方法,再不济的情况把这个操作分发到Fragment中去就好,可是对于处女座的小罗来说,在解决问题的基础上,起码代码要写的漂亮一点,写的漂亮一点心里就舒服一点,心里舒服...

Global site tag (gtag.js) - Google Analytics