Fragment的出现,让android系统上的应用界面变得更丰富。
我觉得我们可以把Fragment看做是一个Activity,Activity在程序运行时被创建,而Fragment在Activity运行时被创建,可以说Fragment是活在Activity中的一个Activity。
上一篇文章我们简单了解了下Activity,很明显,一个独立的界面不能有两个Activity,但是一个界面可以有多个Fragment,这也就意味着我们使用Fragment可以在一个Activity上实现多个Activity的功能。
Fragment的功能:
现在的手机都以巨屏话化发展,一个屏幕一个Activity已经不能满足现在手机的发展趋势,于是Fragment就诞生了。既然Fragment为巨屏而诞生,那么他所应该具备的功能应该是让更多的功能显示在一个独立的屏幕上。
我对Fragment的理解是这样的:Fragment上可以实现Activity上可以实现的功能,但是Fragment不能脱离于Activity单独存在,Fragment的功能就是构建灵活的界面。
Fragment的用法:
一. Fragment的第一种用法是在布局文件中把Fragment给写死,像每个Activity需要在配置文件中配置一样,Fragment的配置是放在每个布局文件中。
<fragment
android:id="@+id/fragment1"
android:name="my/demo/fragmentdemo/Fragment1"
adnroid:layout_width="0dip"
android:layout_height="fill_parent"
android:layout_weight="1" >
</fragment>
然后再新建一个布局文件,里面的内容用来填放Fragment1所需要的内容。
然后再用新建一个类来继承android.app.Fragment,这个类的代码大致如下:
public class Fragment1 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.main, null);
}
}
这是重写Fragment生命周期其中的一个方法,返回的类型是LayoutInflater,可以直接用形参调用inflate方法,指需要显示的布局格式,我这里为了方便就直接用main布局了。
二. 如果一个界面要用到多个Fragment,每个都需要在布局文件中配置,那样会让布局文件很难读,为了让程序更利于维护,我觉得Fragment的使用一般是动态创建的。
首先,新建一个布局文件,里面布局好你想要显示的内容,然后再用新建一个类来继承android.app.Fragment,这一步跟第一种方法是一样的。为了讲得更清楚,先看下面的代码:
package my.demo.fragmentdemo;
import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
public class FragmentDemoActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Fragment1 fragment1 = new Fragment1();
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.layout.main, fragment1);
}
}
其实第二种方法跟第一种方法差不多,第一种方法在布局文件中直接声明了Fragment,而第二种方法是用Fragment1创建的实例来调用用Fragment1的内容并代替掉原来的内容,关键代码是:ft.replace(R.layout.main, fragment1);
这个方法的第一个参数可以用ID指向当前界面或者使用android.R.ID.content指向当前界面,然后第二个参数是创建的要显示的界面的实例。
刚刚开始学习Fragment,逻辑表达能力也不好,希望博友们看到我有理解不对以及表达不对的地方能向我提出。谢谢!