Android Fragment使用方法

通常地 fragment做为宿主activity UI的一部分, 被作为activity整个view hierarchy的一部分被嵌入.
有2种方法你可以添加一个fragment到activity layout:

一、在activity的layout文件中声明fragment
  你可以像为View一样, 为fragment指定layout属性(sdk3.0以后).
  例子是一个有2个fragment的activity:

<?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> 中的 android:name 属性指定了在layout中实例化的Fragment类.
  当系统创建这个activity layout时, 它实例化每一个在layout中指定的fragment,并调用每一个上的onCreateView()方法,来获取每一个fragment的layout.
    系统将从fragment返回的 View 直接插入到<fragment>元素所在的地方.
  注意: 每一个fragment都需要一个唯一的标识, 如果activity重启,系统可以用来恢复fragment(并且你也可以用来捕获fragment来处理事务,例如移除它.)
  有3种方法来为一个fragment提供一个标识:
      为 android:id 属性提供一个唯一ID.
      为 android:tag 属性提供一个唯一字符串.
      如果以上2个你都没有提供, 系统使用容器view的ID.
    
二、使用FragmentManager将fragment添加到一个已存在的ViewGroup.
    当activity运行的任何时候, 都可以将fragment添加到activity layout.只需简单的指定一个需要放置fragment的ViewGroup.
    为了在你的activity中操作fragment事务(例如添加,移除,或代替一个fragment),必须使用来自 FragmentTransaction 的API.
  可以按如下方法,从你的Activity取得一个 FragmentTransaction 的实例:

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

然后你可以使用 add() 方法添加一个fragment, 指定要添加的fragment, 和要插入的view.

ExampleFragment fragment = new ExampleFragment();
fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.commit();

add()的第一个参数是fragment要放入的ViewGroup, 由resource ID指定, 第二个参数是需要添加的fragment.
    一旦用FragmentTransaction做了改变,为了使改变生效,必须调用commit().
    
管理Fragment
   
   管理Fragment在你的Activity你需要使用一个名为FragmentManager的类,通过调用getFragmentManager() 方法来实例化该管理类在你的Activity种。
   FragmentManager 类一些主要的方法有通过findFragmentById()来获取一个Activity中有关Fragment布局。
   当然还有类似 findFragmentByTag()方法,以及当Fragment中出栈的popBackStack()同时可以注册 addOnBackStackChangedListener()管理。
   具体的可以在android.app.FragmentManager类中了解

优化Fragment事物处理

一个很好的特性在添加,删除,替换fragment在Activity时可以使用FragmentTransaction类来提高批量处理的效率,这点和SQLite的数据库更新原理类似。

FragmentManager fragmentManager = getFragmentManager();
//实例化fragmentmanager类
FragmentTransaction transaction = fragmentManager.beginTransaction();
//通过begintransaction方法获取一个事物处理实例。

在这期间可以使用 add(), remove(), 以及  replace(). 最终需要改变时执行 commit()即可。

transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);
transaction.commit();        

对于在切换fragment时,需要保持fragment状态的情况,如底部选项卡切换模式中,可以使用hide()来缓存需要隐藏的fragment和show()来显示隐藏的fragment,当然fragment为null时要先add()
       
Fragment和Activity互相通讯

通常Fragment中我们放入平时标准的控件或自定义的控件,基本上和Activity一样,但是如何Fragment中的View布局也是放到Activity中的,
    这里eoeAndroid提示大家有3种方法来实现:
   
    View listView = getActivity().findViewById(R.id.cwj);
    //通过getActivity方法可以获取一个Activity中的fragment,这里的cwj是一个fragment,在activity中的布局如下

<?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=".ArticleListFragment"
            android:id="@+id/cwj" android:layout_weight="1"
            android:layout_width="0dp" android:layout_height="match_parent" />

        <fragment android:name=".ArticleReaderFragment"
            android:id="@+id/smart" android:layout_weight="2"
            android:layout_width="0dp" android:layout_height="match_parent" />
    </LinearLayout>

第二种通过getFragmentManager方法获取实例,
   ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.cwj);    
    
   还有普遍的方式是定义接口的方式来通讯,API文档也推荐这种方式

时间: 2024-10-07 04:56:54

Android Fragment使用方法的相关文章

Android fragment onHiddenChanged方法具体解释

项目中.为了实现不同fragment之间值得传递,首先想到的是利用bundle或者shareprefercnce之类的共享数据机制,当不符合项目需求,有点过于复杂和冗余,就利用网上一位前辈的建议.在主Activity中,创建一个共享的数据变量,在其它fragment中仅仅要获取到这个值就能够得到数据,实现共享.代码例如以下: 主activity定义一个共享数据变量: private String instrName; public String getInstrName() { return i

Android fragment onHiddenChanged方法详解

项目中,为了实现不同fragment之间值得传递,首先想到的是利用bundle或者shareprefercnce之类的共享数据机制,当不符合项目需求,有点过于复杂和冗余,就利用网上一位前辈的建议,在主Activity中,创建一个共享的数据变量,在其他fragment中只要获取到这个值就可以得到数据,实现共享,代码如下: 主activity定义一个共享数据变量: private String instrName; public String getInstrName() { return inst

Android Fragment 隐藏或显示时调用的生命周期方法

Fragment使用方式大体分两种: 大家要注意不同的Fragment使用方法,Fragment隐藏和显示调用的生命周期方法是不同的,以下是Fragment显示隐藏调用的方法: //判断是否展示—与ViewPager连用,进行左右切换@Overridepublic void setUserVisibleHint(boolean isVisibleToUser) {super.setUserVisibleHint(isVisibleToUser);if (isVisibleToUser)//展示}

Android Fragment 真正的完全解析(上)

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37970961 自从Fragment出现,曾经有段时间,感觉大家谈什么都能跟Fragment谈上关系,做什么都要问下Fragment能实现不~~~哈哈,是不是有点过~~~ 本篇博客力求为大家说明Fragment如何产生,什么是Fragment,Fragment生命周期,如何静态和动态的使用Fragment,Fragment回退栈,Fragment事务:以及Fragment的一些特

Android Fragment 的使用,一些你不可不知的注意事项

Fragment,俗称碎片,自 Android 3.0 开始被引进并大量使用.然而就是这样耳熟能详的一个东西,在开发中我们还是会遇见各种各样的问题,层出不穷.所以,是时候总结一波了. Fragment 简介 作为 Activity 界面的一部分,Fragment 的存在必须依附于 Activity,并且与 Activity 一样,拥有自己的生命周期,同时处理用户的交互动作.同一个 Activity 可以有一个或多个 Fragment 作为界面内容,并且可以动态添加.删除 Fragment,灵活控

【Android自学日记】【转】Android Fragment 真正的完全解析(下)

上篇博客中已经介绍了Fragment产生原因,以及一些基本的用法和各种API,如果你还不了解,请看:Android Fragment 真正的完全解析(上). 本篇将介绍上篇博客提到的:如何管理Fragment回退栈,Fragment如何与Activity交互,Fragment与Activity交互的最佳实践,没有视图的Fragment的用处,使用Fragment创建对话框,如何与ActionBar,MenuItem集成等~~ 1.管理Fragment回退栈 类似与Android系统为Activi

android fragment 博客 学习记录

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37992017 上篇博客中已经介绍了Fragment产生原因,以及一些基本的用法和各种API,如果你还不了解,请看:Android Fragment 真正的完全解析(上). 本篇将介绍上篇博客提到的:如何管理Fragment回退栈,Fragment如何与Activity交互,Fragment与Activity交互的最佳实践,没有视图的Fragment的用处,使用Fragment创

Android Fragment应用实战,使用碎片向ActivityGroup说再见

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/13171191 现在Fragment的应用真的是越来越广泛了,之前Android在3.0版本加入Fragment的时候,主要是为了解决Android Pad屏幕比较大,空间不能充分利用的问题,但现在即使只是在手机上,也有很多的场景可以运用到Fragment了,今天我们就来学习其中一个特别棒的应用技巧. 很多手机应用都会有一个非常类似的功能,即屏幕的下方显示一行Tab标签选项,点击不

[Android]Fragment源码分析(一) 构造

Fragment是Android3.0之后提供的api,被大家广泛所熟知的主要原因还是因为随即附带的ViewPager控件.虽然我并不喜欢用它,但是它确实是一个相对不错的控件.还是我的一贯作风,我将从源码上向大家展示什么是Fragment.我们先写一个简单的代码对Fragment有个直观的认识:(为了保证我们方便调试,我们可以直接使用V4提供的源码包) FragmentTransaction t = getSupportFragmentManager().beginTransaction();