标签:
Fragment是在Android 3.0 (API level 11)中引入的Activity的子模块。初衷是为了适应大屏幕的平板电脑,我们只需要使用Fragment对UI组件进行分组、模块化管理,就能很方便在运行过程中动态更新Activity的界面。Fragment必须被嵌入Activity中使用个,虽然也拥有自己的生命周期,但其生命周期手它所在的Activity的生命周期的控制。只有当该Activity处于活动状态时,我们才可以通过方法独立的操作Fragment。
一、Fragment的几个特性:
· Fragment总是作为Activity界面的组成部分。Fragment可通过getActivity()方法获取所在的Activity,Activity可以调用FragmentManager的findFragmentById()或findFragmentByTag()方法获取Fragment。
· 在Activity运行时,可调用FragmentManager的add()、remove()、replace()方法动态的操作Fragment。
· 一个Activity可同时组合多个Fragment;一个Fragment也可被多个Activity复用。
· Fragment可以响应输入事件并有自己的生命周期,但其生命周期被所在的Activity的生命周期控制。
二、创建Fragment
创建Fragment需要继承Fragment基类或者Fragment的子类,Fragment子类有:DialogFragment、ListFragment、PreferenceFragment或者WebViewFragment。与Activity类似,创建Fragment都需要实现一些回调方法,如:onCreate()、onCreateView()、onStart()、onResume()、onPause()、onStop()等。
通常,我们在开发中会重写以下三个回调方法:
· onCreate():系统创建Fragment对象后回调该方法,初始化必要组件。
· onCreateView():当Fragment绘制界面组件时回调该方法。该方法必须返回一个View,该View就是Fragment所显示的View。
· onPause():离开Fragment时回调该方法。
1 //重写改方法,返回值View将作为Fragment显示的组件 2 @Override 3 public View onCreateView(LayoutInflater inflater, ViewGroup container, 4 Bundle savedInstanceState) { 5 //加载fragment_main.xml布局文件 6 View rootView = inflater.inflate(R.layout.fragment_main, container, false); 7 return rootView; 8 }
三、Fragment与Activity通信
创建好了Fragment只有加入到Activity才可以展示出来,将Fragment添加到Activity中有两种方法:
· 在布局文件中:使用<fragment.../>元素添加Fragment,android:name属性指定Fragment的实现类。
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:orientation="horizontal" > 6 <fragment 7 android:name="com.codingblock.myfragment.MyFragment" 8 android:id="@+id/myfragment" 9 android:layout_width="wrap_content" 10 android:layout_height="match_parent"/> 11 </LinearLayout>
· 在Java:通过FragmentTransaction对象的add()方法来添加Fragment。
1 @SuppressLint("NewApi") 2 @Override 3protected void onCreate(Bundle savedInstanceState) { 4 super.onCreate(savedInstanceState); 5 //加载容器 6 setContentView(R.layout.activity_main); 7 //添加Fragment 8 getFragmentManager().beginTransaction().add(R.id.container, new MyFragment()).commit(); 9 }
其中activity_main.xml布局文件如下:
1 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:id="@+id/container" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 tools:context="com.codingblock.myfragment.MainActivity" 7 tools:ignore="MergeRootFrame" />
提示:Activity的getFragmentManager()方法可以返回FragmentManager,FragmentManager对象的beginTransaction()方法即可开启并返回FragmentTransaction对象。
本篇博文仅介绍了Fragment的简单用法,在后续博文中将接着更深入的探讨Fragment。
标签:
原文地址:http://www.cnblogs.com/codingblock/p/4761156.html