【Android Developers Training】 20. 创建一个

系统 1956 0

注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好。

原文链接: http://developer.android.com/training/basics/fragments/creating.html


你可以把一个fragment看成是一个activity的模块,有着自己的生命周期,接收自己的时间输入,你可以在activity的运行阶段添加或者移除fragment(某种意义上说,像是你可以在不同activity中重用的子activity)。这堂课将会展示如何通过使用 Support Library 来继承 Fragment 类,这样一来,你的应用就能与Android 1.6及以上的设备兼容了。

Note:

如果你决定你的应用仅支持API Level 11及以上的系统,那么你无需使用 Support Library ,可以使用框架中内置的 Fragment 类和与它相关的APIs。不过要注意这堂课关注的是使用 Support Library 中提供的API,它和平台中内置的 Fragment 类相比,区别在于两者的包签名不同,有时候还有一些接口名字上的差异。

在你开始学习这节课之前,你必须合理配置你的Android项目来使用 Support Library。如果在此之前你没有使用过 Support Library,那么按照 Support Library Setup 这一文档的步骤,配置你的项目来使用 v4 库。然而,你也可以使用“ v7应用兼容库( v7 appcompat library ”使你的activities包含 action bar ,此时你的应用将兼容Android 2.1(API Level 7)及以上的系统,同时也包含了 Fragment 的APIs。

 

一). 创建一个Fragment类

为了创建一个fragment,继承 Fragment 类,之后覆写核心生命周期函数来插入你的应用逻辑,这和你处理 Activity 类的方法很相似。

当创建一个 Fragment 时,有一点不同的地方是:你必须使用 onCreateView() 回调函数来定义它的布局。事实上,这是唯一一个为了使一个 fragment 运行所需要的回调函数。下面是一个简单的例子:

      
        import
      
      
         android.os.Bundle;


      
      
        import
      
      
         android.support.v4.app.Fragment;


      
      
        import
      
      
         android.view.LayoutInflater;


      
      
        import
      
      
         android.view.ViewGroup;




      
      
        public
      
      
        class
      
       ArticleFragment 
      
        extends
      
      
         Fragment {

    @Override

    
      
      
        public
      
      
         View onCreateView(LayoutInflater inflater, ViewGroup container,

        Bundle savedInstanceState) {

        
      
      
        //
      
      
         Inflate the layout for this fragment
      
      
        return
      
       inflater.inflate(R.layout.article_view, container, 
      
        false
      
      
        );

    }

}
      
    

像activity一样,一个fragment需要实现其他的生命周期函数,这允许你去管理它的状态(从activity添加或移除时,或者activity自身声明周期状态发生转变时)。例如,当activity调用了 onPause() 方法,所有activity中的fragment也将调用 onPause() 方法。

可以阅读 Fragments 获取更多关于fragment生命周期和回调函数的知识。

 

二). 使用XML将Fragment添加至一个Activity

尽管fragments是可重用、模块化的UI组件,每个fragment的实例必须和一个父 FragmentActivity 关联。你可以通过在activity的XML布局文件中定义每一个fragment来实现这种关联。

Note:

FragmentActivity 是一个由 Support Library 提供的 特殊 activity,用来处理早于API Level 11系统中的fragment。如果你所支持的系统版本高于API Level 11,那么你可以直接用常规的 Activity

下面是一个布局文件的例子,它向一个activity添加了两个fragment,前提是设备屏幕可认为是“大( large )”的(通过在目录名后面添加“ large ”适配符)。

res/layout-large/news_articles.xml

      
        <
      
      
        LinearLayout 
      
      
        xmlns:android
      
      
        ="http://schemas.android.com/apk/res/android"
      
      
        

    android:orientation
      
      
        ="horizontal"
      
      
        

    android:layout_width
      
      
        ="fill_parent"
      
      
        

    android:layout_height
      
      
        ="fill_parent"
      
      
        >
      
      
        <
      
      
        fragment 
      
      
        android:name
      
      
        ="com.example.android.fragments.HeadlinesFragment"
      
      
        

              android:id
      
      
        ="@+id/headlines_fragment"
      
      
        

              android:layout_weight
      
      
        ="1"
      
      
        

              android:layout_width
      
      
        ="0dp"
      
      
        

              android:layout_height
      
      
        ="match_parent"
      
      
        />
      
      
        <
      
      
        fragment 
      
      
        android:name
      
      
        ="com.example.android.fragments.ArticleFragment"
      
      
        

              android:id
      
      
        ="@+id/article_fragment"
      
      
        

              android:layout_weight
      
      
        ="2"
      
      
        

              android:layout_width
      
      
        ="0dp"
      
      
        

              android:layout_height
      
      
        ="match_parent"
      
      
        />
      
      
        </
      
      
        LinearLayout
      
      
        >
      
    

Tip:

关于更多为不同屏幕尺寸创建布局的知识,可以阅读: Supporting Different Screen Sizes

之后将布局应用到你的activity当中:

      
        import
      
      
         android.os.Bundle;


      
      
        import
      
      
         android.support.v4.app.FragmentActivity;




      
      
        public
      
      
        class
      
       MainActivity 
      
        extends
      
      
         FragmentActivity {

    @Override

    
      
      
        public
      
      
        void
      
      
         onCreate(Bundle savedInstanceState) {

        
      
      
        super
      
      
        .onCreate(savedInstanceState);

        setContentView(R.layout.news_articles);

    }

}
      
    

如果使用的是 v7 appcompat library ,你的activity应该继承 ActionBarActivity ,它是 FragmentActivity 的子类。 更多信息可以阅读: Adding the Action Bar (博客链接: http://www.cnblogs.com/jdneo/p/3440367.html )。

Note:

当你通过将fragment在XML布局文件中定义的方式把fragment添加到activity中,你不能再运行时移除这个fragment。如果你计划在用户交互过程中可以吧fragment换入或换出,你必须在activity第一次启动的时候把这个fragment添加到activity中,这是下节课将会展示的内容。

【Android Developers Training】 20. 创建一个Fragment


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论