一.Fragment概要:
于Fragment经,布局更好地适应各种尺寸的android打电话,加方便的实现不同页面的切换,就不像曾经activity的跳转那样的麻烦了。能够在activity中嵌套不同的Fragment。每一个Fragment能够用不同的布局,能够动态的进行加入、替换,就像以下的图片一样:
二. Fragment的生命周期:
每一个Fragment都有自己生命周期。可是与activity的生命周期不全同样,Fragment额外的加入了5个生命周期回调方法。先看一下图:
这五个方法:
1.onAttach(Activity); //当Activity与Fragment发生关联时调用。
2.onCreateView(LayoutInflater,ViewGroup,Bundle); //创建该Fragment的视图
3.onActivityCreate(bundle); //当Activity的onCreate()。方法返回时调用
4.onDestoryView(); //与onCreateView相相应,当改Fragment被移除时调用
5.onDetach(); //与onAttach()相相应,当Fragment与Activity的关联被取消时调用
注意:除了onCreateView。其它的全部方法假设你重写了,必须调用父类对于该方法的实现。
继承Fragment必须重写这种方法:
(2).onCreateView():
fragment第一次绘制它的用户界面的时候, 系统会调用此方法. 为了绘制fragment的UI,此方法必须返回一个View, 这个view就是你在fragment中实现的布局。不提供则返回null。
生命周期:
(1)第一次启动Fragment:
onAttach
onCreate
onCreateView
onActivityCreated
onStart
onResume
(2)切换到其它Fragment:
onPause
onStop
onDestroyView
(3)切换回来:
onCreateView
onActivityCreated
onStart
onResume
(4)返回手机桌面:
onPause
onStop
回到应用
onStart
onResume
(5)退出应用
onPause
onStop
onDestroyView
onDestroy
onDetach
Fragment常常作为activity的界面的一部分,既然是一部分那么Fragment肯定会给activity用一个layout,也能够说是一个view。那么就要通过onCreateView返回activity一个layout,那么怎么返回呢?就要重写这种方法:
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return super.onCreateView(inflater, container, savedInstanceState); }
这里的三个參数第一个inflater不用说是用来获得布局文件的,第二个參数container就是将要插入的父ViewGroup,第三个提供恢复Fragment提供数据用的。
重写就要这样实现:
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_1, container, false); }这样就能够把Fragment布局返回了。
四.实现開始的效果图:
主界面:
public class MainActivity extends Activity implements OnClickListener { RelativeLayout r1; RelativeLayout r2; RelativeLayout r3; RelativeLayout view = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.bottom_layout); r1 = (RelativeLayout) findViewById(R.id.layout1); r2 = (RelativeLayout) findViewById(R.id.layout2); r3 = (RelativeLayout) findViewById(R.id.layout3); r1.setOnClickListener(this); r2.setOnClickListener(this); r3.setOnClickListener(this); setDefaultFragment(); } private void setDefaultFragment() { FragmentManager fm = getFragmentManager(); FragmentTransaction transaction = fm.beginTransaction(); MyFragment my = new MyFragment(); transaction.replace(R.id.frame_layout1, my); transaction.commit(); } @Override public void onClick(View arg0) { FragmentManager fm = getFragmentManager(); // 开启Fragment事务 FragmentTransaction transaction = fm.beginTransaction(); switch (arg0.getId()) { case R.id.layout1: if (view != null) { view.setBackgroundResource(R.color.back_bg); } view = r1; r1.setBackgroundResource(R.color.black_purple); MyFragment my = new MyFragment(); transaction.replace(R.id.frame_layout1, my); transaction.commit(); break; case R.id.layout2: if (view != null) { view.setBackgroundResource(R.color.back_bg); } view = r2; r2.setBackgroundResource(R.color.black_purple); MyFragment2 my2 = new MyFragment2(); transaction.replace(R.id.frame_layout1, my2); transaction.commit(); break; case R.id.layout3: if (view != null) { view.setBackgroundResource(R.color.back_bg); } view = r3; r3.setBackgroundResource(R.color.black_purple); MyFragment3 my3 = new MyFragment3(); transaction.replace(R.id.frame_layout1, my3); transaction.commit(); break; } } }
主界面布局:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <LinearLayout android:id="@+id/linear_layout" android:layout_width="fill_parent" android:layout_height="50dp" android:layout_alignParentBottom="true" android:background="#696969" android:orientation="horizontal" > <RelativeLayout android:id="@+id/layout1" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="1" android:background="@drawable/tab_bg" > <ImageView android:id="@+id/image1" android:layout_width="28dp" android:layout_height="28dp" android:layout_centerHorizontal="true" android:layout_marginTop="5dp" android:background="@drawable/ic_launcher" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/image1" android:layout_centerHorizontal="true" android:text="音乐" android:textSize="13sp" > </TextView> </RelativeLayout> <RelativeLayout android:id="@+id/layout2" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="1" android:background="@drawable/tab_bg" > <ImageView android:id="@+id/image2" android:layout_width="28dp" android:layout_height="28dp" android:layout_centerHorizontal="true" android:layout_marginTop="5dp" android:background="@drawable/ic_launcher" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/image2" android:layout_centerHorizontal="true" android:text="电影" android:textSize="13sp" > </TextView> </RelativeLayout> <RelativeLayout android:id="@+id/layout3" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="1" android:background="@drawable/tab_bg" > <ImageView android:id="@+id/image3" android:layout_width="28dp" android:layout_height="28dp" android:layout_centerHorizontal="true" android:layout_marginTop="5dp" android:background="@drawable/ic_launcher" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/image3" android:layout_centerHorizontal="true" android:text="影视" android:textSize="13sp" > </TextView> </RelativeLayout> </LinearLayout> <FrameLayout android:id="@+id/frame_layout1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_above="@id/linear_layout" > </FrameLayout> </RelativeLayout>
Fragment实现:
public class MyFragment extends Fragment{ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_1, container, false); } }
Fragment布局:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="第一个页面" /> </RelativeLayout>
另外两个Fragment和这个同样。
版权声明:本文博主原创文章,博客,未经同意不得转载。