Fragment简介
每一个fragment都包含自己的UI布局,并接受输入事件,且必须绑定到某个Activity中。fragment的主要作用是将Activity拆分成多个独立封装的可重用组件,每个组件有自己的生命周期和UI布局,
使得应用在不同尺寸的设备上都有较好的显示效果。它们可以在Activity处于运行状态时动态地添加和删除,可以对输入事件进行响应。
Fragment生命周期
首先Fragment不同于Activity的是,Fragment的生命周期收到它所绑定的Activity影响。比如:activity处于销毁状态时,它的所有fragment也一样。但是activity处于运行状态时就可以单独维护每一个fragment的状态。
其次Activity处于停止状态时系统默认会在back stack中保存它的实例,而Fragment从Activity上移除是必须显示得调用addToBackStack( )才会添加到back stack
Fragment有三个状态:
活动状态:该Fragment在活动的Activity上可见
暂停状态:其他Activity位于前台,该Fragment的Activity仍然可见
停止状态:绑定的Activity处于停止状态或者Fragment从Activity移除
销毁状态:当它的Activity被销毁是
Fragment的回调函数和Activity对它生命周期的影响见下图:
onAttach、onCreate、onDestory和onDetch只会调用一次
Fragment的创建
继承Fragment或者它的子类(ListFragment、DialogFragment、PreferenceFragment)类,然后重写相应的方法:onCreate() onCreateView() onPause()常用
<span style="font-size:14px;">public class MyFragment extends ListFragment{
String[] names = {"skq","csy","sdf","sdffg","qwe"};
/*如果fragment有自己的ui,重写该方法,返回对应的View
public View onCreateView(LayoutInflater inflater,
ViewGroup group,Bundle savedBundle){
return inflater.inflate(R.layout.fragment,group,false);
}
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setListAdapter(new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_1,names));
}
public void onListItemClick(ListView parent, View v,int position, long id){
Toast.makeText(getActivity(), "you have selected "+names[position],
Toast.LENGTH_SHORT).show();
}
}</span>
Fragment是不需要再manifest中注册的,因为它必须绑定到某一个activity上。
Fragment添加
每一个Activity都包含一个fragment Manager 来管理它包含的Fragment。
通过FragmentManager manager = getFragmentManager()获得。
方法一:通过布局文件添加Fragment
该方法静态得添加Fragment ,一旦Activity被创建,Fragment就会被填充。
<span style="font-size:14px;"> <fragment
android:name = "com.example.activitytest.Fragment"
android:id="@+id/framgent2"
android:layout_width="0dp"
android:layout_height="300dp"
android:layout_weight="0.5"/></span>
name属性指定Fragment类的路径。
方法二:通过代码添加Fragment
<span style="font-size:14px;">MyFragment fragment1 = new MyFragment();
FragmentManager fragmentManager = getFragmentManager(); //获得fragmentManager
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();//获得fragmentTransaction
fragmentTransaction.replace(R.id.main_layout, fragment1,"first"); //替换fragment
//还可以是添加(add)、删除(remove)fragment
fragmentTransaction.commit();//提交事务</span>
Fragment的信息交流
fragment获得activity的信息:
通过调用getActivity()可以获得该fragment绑定的activity实例。
activity获得fragment的信息:
通过调用getFragmentManager()可以获得fragment管理器,再通过getFragmentById()或getFragmentByTag()获取对应的fragment
activity和fragment间共享事件信息:
在fragment中声明一个接口,并保存一个该接口的引用,然后在onAttach中把绑定的Activity复制给这个引用,同时添加该Fragment的Activity必须实现该接口。