手持终端
Eclipse平台下Android开发环境的搭建
PhoneGap配置到Eclipse开发环境
使用PhoneGap开发Android应用程序
PhoneGap3.0以上版本配置到Eclipse开发环境
使用PhoneGap3.0版本开发Android应用程序
PhoneGap3.0的第三方Android插件
Cordova配置到Android Studio开发环境
Android系统基本架构
Android的字符串颜色图片样式
Android的常用控件及菜单
Android的消息提示及传递
Android系统的组件通信
Android系统的Service
Android的广播消息接收
Android的数据存储与访问
Android系统的网络应用
Android图形图像处理
Android的Fragment框架
Android系统的并发编程
Java源文件结构与保留字
Java语言的数据类型与变量
Java的运算符与流程控制
Java语言的数组及操作
Java面向对象编程
Java的常用类
Android开发常用工具及命令
Android应用程序权限管理
Android系统提供的R类内置资源
Android系统的控件类及其方法
Android系统的菜单类及其方法
Android系统的对话框
Android应用程序模型及组件
Android的绘图类及方法
Android系统的动画效果
Android的数据库操作
Android的多媒体功能
Android系统照相机的使用
Android的文本朗读TTS
获取Android系统信息
Android系统的电话操作
Android系统的定位
Android系统的传感器
可以把Fragment设计成可以在多个Activity中复用的模块,也可以组合多个Fragment放在一个单独的Activity中来创建一个多界面区域的UI,并可以在多个Activity中重用某一个Fragment。Fragment模块有自身的布局、生命周期,可以单独处理自身的输入,在Activity运行时可以加载或移除Fragment模块。
因为Fragment必须嵌入在Activity中使用,所以Fragment的生命周期和它所在的Activity密切相关。如果Activity处于暂停状态,则其中所有的Fragment都是暂停状态;如果Activity处于stopped状态,则这个Activity中所有的Fragment都不能被启动;如果Activity被销毁,那么其中的所有Fragment都会被销毁。
但当Activity处于活动状态,此时可以独立控制Fragment的状态,比如添加或者移除Fragment。
1.Fragment的生命周期:
当一个Fragment被创建时,会经历以下状态:onAttach()--onCreate()--onCreateView()-- onActivityCreated()
当这个Fragment对用户可见时,会经历以下状态:onStart()--onResume()
当这个Fragment进入后台时,会经历以下状态:onPause()--onStop()
当这个Fragment被销毁了,或在所的Activity被销毁了,会经历以下状态:onPause()--onStop() --onDestroyView()--onDestroy()--onDetach()
一旦Activity进入Resumed状态(即Running状态),用户就可以自由地添加和删除Fragment了。因此,只有当Activity处于Resumed状态时,Fragment的生命周期才能独立运转,其他时候依赖于Activity的生命周期变化。
2.Fragment使用:
使用Fragment时,需要继承Fragment或者Fragment的子类DialogFragment、ListFragment、PreferenceFragment、WebViewFragment,代码看起来与Activity类似。
⑴使用Support Library:
Support Library是一个提供了API库函数的JAR文件,这样就可以在旧版本的Android上使用一些新版本的API。比如android-support-v4.jar。为了在旧版本系统上使用新版本,需要导入:
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
同时需要将上述的包复制到项目的libs目录中,在项目的右键菜单中选择Properties--Java Builder Path--Add External JARs...,添加android-support-v4.jar。
当创建包含Fragment的Activity时,如果用的是Support Library,那么继承的就应是Fragment Activity。其中必须实现3个回调函数:
·onCreate():系统在创建Fragment时调用该方法,用来初始化相关组件,一些在暂停或停止时依然需要保留的内容。
·onCreateView():当第一次绘制Fragment的UI时系统调用该方法,必须返回一个View,如果Fragment不提供UI则返回null。如果继承自ListFragment,则onCreateView()默认的实现会返回一个ListView,不用自己实现。
·onPause():当用户离开Fragment时首先调用该方法,需要提交一些变化,因为用户很可能不再返回。
⑵实现Fragment的UI:
提供Fragment的UI,必须实现onCreateView()方法。假设Fragment的布局设置写在example_fragment.xml中,那么onCreateView()方法写为:
public static class ExampleFragment extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState)[
//Inflate the layout dor this fragment
return inflater.inflate(R.layout.example_fragment,container,false);
}
}
onCreateView()中的container参数代表该Fragment在Activity中的父控件;savedInstanceState提供了上一个实例的数据。
inflate()方法有3个参数,resourceId指明了当前的Fragment对应的资源文件;container是父容器控件;第3个为布尔型参数,表明是否连接该布局和其父控件,因为系统已经插入了这个布局到父控件,设置为true会产生多余的一个ViewGroup。
3.将Fragment加入Activity:
当Fragment被加入Activity中时,会处在对应的ViewGroup中。Fragment有两种加载方式,一种是在Activity的layout中使用标记<fragment>声明,另一种是在代码中加入到指定的ViewGroup。Fragment可以并不是Activity布局中的任何一部分,是一个不可见的部分。
⑴通过布局文件将Fragment加入Activity:
在Activity的布局文件中,将Fragment作为一个子标记加入即可,示例代码:
<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/list" android:layout_weight="1"
android:layout_width="0dp" android:layout_height="match_parent"/>
</LinearLayout>
其中,android:name属性设置为创建的Fragment的完整类名。当创建该Activity布局文件时,系统会实例化每一个Fragment,并且调用它们的onCreateView()方法,来获知相应Fragment的布局,并将返回值插入Fragment标记所在的位置。
有3种方法为Fragment提供Id,android:id属性、android:tag属性,如果上述两种都没有提供,则使用容器view的Id。
⑵提供编程方式将Fragment加入到一个ViewGroup中:
当Activity处于Running状态时,可以在Activity的布局中动态加入Fragment。只需要指定加入该Fragment的父ViewGroup即可。
首先需要一个FragmentTransaction实例:
FragmentManager fragmentManager=getFragmentManager();
FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
如果导入的包为import android.support.v4.app.FragmentManager;
之后,用add()方法添加Fragment对象:
ExampleFragment fragment=new ExampleFragment();
fragmentTransaction.add(R.id.fragment_container,fragment);
fragmentTransaction.commit();
其中,第1个参数是该Fragment的容器,即父控件组。最后调用commit()方法使得Fragment Transaction实例的改变生效。