• 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

  • 相关阅读:
    ASP.NET备份还原数据库
    ASP.NET的运行原理与运行机制
    Asp.net WebPages框架运行原理浅析(转)
    不要盲目选择定时器
    C# 如何用计时器Timer控件实现停留几秒再做切换窗体的操作
    使用System.Timers.Timer类实现程序定时执行
    C#启动一个外部程序(1)-WinExec
    几种类型的db,以及最新的db排名,看一下
    SharePoint 2013 讨论板列表"Connect to Outlook" 不可用解决方案
    Java可视化编程,基于布局管理器的UI设计
  • 原文地址:https://www.cnblogs.com/fengquanwang/p/3142631.html
Copyright © 2020-2023  润新知