Fragment
##Fragment
- 用途:在一个Activity里切换界面,切换界面时只切换Fragment里面的内容
- 生命周期方法跟Activity一致,可以理解把其为就是一个Activity
- 定义布局文件作为Fragment的显示内容
使用Fragment:
- layout下创建fragment1.xml
- 创建类Fragment1,继承Fragment
把Fragment显示至指定ViewGroup中
主要代码:
activity_main.xml
<FrameLayout android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" android:id="@+id/fl" ></FrameLayout>
fragment1.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="#ff0000" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="热情的红色" android:textSize="20sp" /> </LinearLayout>
Fragment1.java:
public class Fragment1 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub //用布局文件填充成一个View对象,返回出去,那么就显示在Fragment上了 View v = inflater.inflate(R.layout.fragment1, null); return v; } }
MainActivity.java
public void click1(View v){ //把fragment1的界面显示至帧布局中 //创建fragment对象 Fragment1 fg1 = new Fragment1(); //获取fragment管理器 FragmentManager fm = getFragmentManager(); //打开事务 FragmentTransaction ft = fm.beginTransaction(); //把内容显示至帧布局,在这里可以设置一个TAG, //ft.replace(R.id.fl, fg1,"我是TAG"); //可通过如下方法找到这个对象。 //Fragment leftMenuFragment = fm.findFragmentByTag(FRAGMENT_LEFT_MENU); ft.replace(R.id.fl, fg1); //提交 ft.commit(); }
生命周期
- fragment切换时旧fragment对象会销毁,新的fragment对象会被创建
低版本兼容
- 在support-v4.jar包中有相关api,也就是说fragment可以在低版本模拟器运行
fragment跟activity传递数据。
在fragmentXXX.javal类中提供对外的方法或者activity中提供fragment调用的方法。
一个Activity对多个fragment
- 抽取一个基类,BaseFragment 继承Fragment。
- BaseFragment实现onCreatView(XXX)
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
return initVies();
}
- 定义一个抽象方法public abstract View initView();子类必须实现,和一个initData()
- 定义一个全局的Activity mActivity;
- 在onCreate里获取: public void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); this.mContext = getActivity(); }
- 在onAttach:
@Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
super.onAttach(activity);
mContext = activity;
}
- Activity端:
FragmentManager fm = getFragmentManager();
FragmentTransaction transacntion = fm.beginTransaction();
transacntion.replace(R.id.ll, new fragment1(),"我是TAG");
transacntion.commit();
下面两篇博客很详细:
Fragment全解析系列https://www.jianshu.com/p/d9143a92ad94
android之Fragment基础详解:http://www.cnblogs.com/lgk1002/p/6170494.html