zoukankan      html  css  js  c++  java
  • Android

    你可以把fragment当作activity中的一个活动模块,它有自己的生命周期,自己接收输入消息,可以在activity运行的时候添加和删除(就像可以在其他activity中重用的"子activity")。这里会讲述如何用Support Library来扩展Fragment类这样app可以在老版本的系统上运行,就算是Android1.6。

    注意:如果你因为什么原因把最低API level调整为11或者更高,你就不需要使用Support Library了,可以直接使用Fragment类只待的framework和相关API。只是要意识到这里将要介绍的是使用Support Library中的API,Support Library使用了特殊的包签名并且有时候会和平台API的名字有点小差别。

    创建一个Fragment类

    如果要创建一个fragment, 首先要扩展Fragment类,然后重写主要的生命周期方法来插入你的app逻辑,和在Activity类中的方法相似。

    创建Fragment有一点不同是你必须使用onCreateView()方法来定义布局。事实上,这是你需要的唯一一个回调方法让fragment运行。例如,这里有一个简单的例子,它定义了自己的布局:

     1 import android.os.Bundle;
     2 import android.support.v4.app.Fragment;
     3 import android.view.LayoutInflater;
     4 import android.view.ViewGroup;
     5                    
     6 public class ArticleFragment extends Fragment {
     7     @Override
     8     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     9         Bundle savedInstanceState) {
    10         // Inflate the layout for this fragment
    11         return inflater.inflate(R.layout.article_view, container, false);
    12     }
    13 }

    和activity一样,fragment也应该实现其他的生命周期回调方法来让你可以管理它的状态,当它从activity中添加删除或者在生命周期不同状态间切换时。例如,当activity的onPause()方法被调用后,activity中所有的fragment都会受到onPause()调用。

    更多关于fragment生命周期和回调方法的信息,参考Fragment开发。

    用XML在activity中添加Fragment 

    fragment是可重用的,模块化的UI组件,每一个Fragment类实例都必须和一个FragmentActivity相关。你通过在activity的XML文件中定义每个fragment来完成这个关联。

    注意:FragmentActivity是一个Support Library提供的在系统版本比APIlevel11更老的版本中处理fragments的特殊的activity。如果你支持的API版本是11或者更高,那么直接使用正常的Activity。

    这里是一个例子布局文件,它在设备屏幕是"large"时向activity中添加了两个fragment(文件夹名中有large标识)。

    res/layout-large/news_articles.xml:

     1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     android:orientation="horizontal"
     3     android:layout_width="fill_parent"
     4     android:layout_height="fill_parent">
     5          
     6     <fragment android:name="com.example.android.fragments.HeadlinesFragment"
     7               android:id="@+id/headlines_fragment"
     8               android:layout_weight="1"
     9               android:layout_width="0dp"
    10               android:layout_height="match_parent" />
    11          
    12     <fragment android:name="com.example.android.fragments.ArticleFragment"
    13               android:id="@+id/article_fragment"
    14               android:layout_weight="2"
    15               android:layout_width="0dp"
    16               android:layout_height="match_parent" />
    17          
    18 </LinearLayout>

    提示:更多关于为不同屏幕大小提供布局的信息,查看Supporting Different Screen Sizes

    下面识activity如何使用这个布局:

     1 import android.os.Bundle;
     2 import android.support.v4.app.FragmentActivity;
     3        
     4 public class MainActivity extends FragmentActivity {
     5     @Override
     6     public void onCreate(Bundle savedInstanceState) {
     7         super.onCreate(savedInstanceState);
     8         setContentView(R.layout.news_articles);
     9     }
    10 }

    注意:当通过在xml文件定义fragment来加入到activity中时,你不能在runtime移出fragment。如果计划在用户交户时添加删除fragment,应该在activity第一次启动时加入fragment,下一篇会介绍。

    上一篇:Android - 用Fragments实现动态UI - 使用Android Support Library

    下一篇:Android - 用Fragments实现动态UI - 创建灵活的UI

  • 相关阅读:
    React生命周期, 兄弟组件之间通信
    React组件式编程Demo-用户的增删改查
    React之this.refs, 实现数据双向绑定
    CCF CSP 201812-4 数据中心
    CCF CSP 201812-4 数据中心
    PAT 顶级 1020 Delete At Most Two Characters (35 分)
    PAT 顶级 1020 Delete At Most Two Characters (35 分)
    Codeforces 1245C Constanze's Machine
    Codeforces 1245C Constanze's Machine
    CCF CSP 201712-4 行车路线
  • 原文地址:https://www.cnblogs.com/fengquanwang/p/3142631.html
Copyright © 2011-2022 走看看