`
jguangyou
  • 浏览: 378831 次
  • 性别: 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实例

    - `AndroidFragment.zip`可能包含一个基础的Android Fragment项目,用于学习Fragment的基础用法和实践。 7. **Fragment在不同版本上的兼容性**: - 从Android 3.0(API级别11)开始引入Fragment,但通过Android ...

    Android Fragment之间的切换

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

    android fragment超简单使用demo

    本示例"android fragment超简单使用demo"专注于Fragment的基础使用,旨在帮助开发者快速理解并掌握Fragment的核心概念。 首先,Fragment并不是独立的Activity,而是作为Activity的一部分存在,它可以嵌入到Activity...

    android Fragment Demo

    在"BasicFragment"这个子文件中,我们可以预期看到一个基础的Fragment实现。通常,一个Fragment会包含以下部分: 1. **Fragment类定义**:Fragment的类继承自android.app.Fragment或androidx.fragment.app.Fragment...

    android Fragment最简单的例子

    标题“android Fragment最简单的例子”暗示我们将探讨一个基础的Fragment使用案例,这个例子可以帮助初学者快速理解Fragment的工作原理和基本用法。 首先,Fragment是Android应用程序中UI的一部分,它可以独立于...

    Androidfragment结合viewpager的滑动与点击

    综上所述,这个"Androidfragment结合viewpager的滑动与点击"示例涵盖了Android开发中多个重要领域,通过实践这个项目,开发者可以深入理解如何将Fragment和ViewPager协同工作,以及如何处理XML数据、SQLite数据库和...

    android fragment实现按钮切换

    在Android应用开发中,Fragment是Android ...在实际项目中,你可能还需要考虑更多细节,如数据传递、Fragment间的通信等问题,但这个基础结构将为你提供一个良好的起点。记得在实践中不断调整和优化,以提高用户体验。

    Android Fragment+限定符适配Demo

    在Android开发中,Fragment是应用程序界面的一个可重用组件,它可以独立于Activity存在,并且可以在多个屏幕配置下灵活展示。本Demo重点展示了如何利用Fragment配合限定符进行屏幕适配,特别是针对不同尺寸的设备,...

    Android Fragment测试样例程序

    其中,使用Interface是最基础的方法,而使用ViewModel则是Android推荐的现代架构组件方式,因为它提供了生命周期感知能力,使得数据在Fragment重建时不会丢失。 5. **横竖屏切换处理**:在Android中,屏幕方向改变...

    Android动态加载fragment(fragment复用)

    理解这些生命周期方法的调用顺序和应用场景是正确管理Fragment的基础。 二、动态加载Fragment 1. 使用FragmentManager:通过FragmentManager的beginTransaction()方法创建一个Transaction对象,然后调用其add(), ...

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

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

    Fragment实例-Android Studio项目

    总之,这个项目为我们提供了一个学习和实践Fragment的平台,涵盖了从基础用法到复杂场景的实现,对于理解和掌握Android应用开发中的Fragment管理至关重要。通过分析和运行项目中的代码,我们可以深入理解Fragment的...

    android中fragment的基础使用

    在Android开发中,Fragment是一个非常重要的组件,它允许开发者在Activity中分割用户界面,使得UI设计更加灵活,尤其适用于处理不同屏幕尺寸和分辨率的问题。Fragment的设计理念是将UI的某个功能部分封装起来,使其...

    android中的fragment切换的优化

    首先,我们来探讨Fragment的基础知识。Fragment是Android 3.0(API级别11)引入的,目的是为了更好地支持大屏幕设备,如平板电脑,但同时也适用于手机。Fragment有自己的生命周期,包括onCreate(), onCreateView(), ...

    android简单闪频+登陆+fragment+跳转

    综上所述,这个项目展示了Android应用的基础架构和常见功能实现,对于初学者来说是个很好的学习案例。开发者通过掌握闪屏页、登录、Fragment和页面跳转等技术,可以构建出功能完善的移动应用。同时,良好的代码组织...

    Android解析xml文件获取网络数据http请求,带Fragment框架,图片缓存本地

    在Android应用开发中,XML常用于传输和存储结构化数据,而HTTP协议是网络通信的基础,用于客户端与服务器之间的数据交换。在这个项目中,我们关注的是如何在Android应用中使用XML解析器获取网络数据,结合Fragment...

    android fragment 的应用

    在Android开发中,Fragment是应用程序界面的一个可重用组件,它允许我们把用户界面分割成独立的部分,每个部分有自己的生命周期和交互逻辑。Fragment最初在Android 3.0(API级别11)引入,目的是为了更好地支持平板...

    Android控件ViewPager与Fragment基础用法

    这篇博客将深入探讨ViewPager与Fragment的基础用法。 **一、ViewPager简介** ViewPager是Android Support Library中的组件,它主要用于实现屏幕间的滑动切换效果。通过适配器(PagerAdapter)提供数据,ViewPager会...

Global site tag (gtag.js) - Google Analytics