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


    注:本文翻译自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 appcompatlibrary”使你的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中,这是下节课将会展示的内容。

  • 相关阅读:
    bzoj3884: 上帝与集合的正确用法(数论)
    洛谷10月月赛R2·浴谷八连测R3题解
    bzoj5055: 膜法师(BIT)
    bzoj2213: [Poi2011]Difference(思维题)
    bzoj1016: [JSOI2008]最小生成树计数(kruskal+dfs)
    一模 (2) day2
    一模 (2) day1
    Prime Palindromes
    常州培训 day5 解题报告
    一模 (1) day2
  • 原文地址:https://www.cnblogs.com/jdneo/p/3456165.html
Copyright © 2020-2023  润新知