Fragment简介
Fragment(碎片)是一种可以嵌入在Activity中的UI片段,它能让程序更加合理地利用大屏幕空间,因而Fragment在平板上应用非常广泛。Fragment与Activity十分相似,它包含布局,同时也有自己的生命周期。
Fragment需要包含在Activity中,一个Activity里面可以包含一个或者多个Fragment,而且一个Activity可以同时展示多个Fragment。同时,Fragment也具有自己的布局。
Activity1 Activity2
Fragement的生命周期
与Activity生命周期十分相似
1.运行状态
当一个Fragment是可见的,并且它所关联的Activity正处于运行状态,那么该Fragment也处于运行状态。
2.暂停状态
当一个Activity进入暂停状态,与它相关联的可见Fragment也会进入暂停状态。
3.停止状态
当一个Activity进入停止状态,与它相关联的Fragment就会进入停止状态。或者通过调用FragmentTransaction的remove(),replace()方法将Fragment从Activity中移除。如果在事务提交之前调用addToBackStack()方法,这时的Fragment也会进入停止状态。
创建Fragment
与创建Acitivity类似,要创建一个Fragment必须创建一个类继承Fragment。需要注意的是Android系统提供了两个Fragment类,分别是android.app.Fragment和android.support.v4.app.Fragment。继承android.app.Fragment类则程序只能兼容Android 4.0以上的系统,继承android.support.v4.app.Fragment类则可以兼容低版本的Android系统。
1.创建Fragment
示例代码
public class Fragmentone extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment1, container,false);
return view;
}
}
上述代码重写了Fragment的onCreatView()方法,并在该方法中调用了LayoutInflater的inflate()方法将Fragment布局动态加载起来。
2.添加Fragment
Fragment创建完成后不能单独使用,还需要将Fragment添加到Activity中,在Activity中添加Fragment有两种方式,一种是直接在布局文件中添加,将Fragment作为Activity整个布局的一部分;另一种是当程序运行时,动态的将Fragment添加到Activity中。
示例代码:
<fragment
android:id="@+id/fragment1"
android:name="com.jay.example.fragmentdemo.Fragmentone"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
动态加载示例代码:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Display dis = getWindowManager().getDefaultDisplay();
if(dis.getWidth() > dis.getHeight())
{
Fragment1 f1 = new Fragment1();
getFragmentManager().beginTransaction().replace(R.id.LinearLayout1, f1).commit();
}
else
{
Fragment2 f2 = new Fragment2();
getFragmentManager().beginTransaction().replace(R.id.LinearLayout1, f2).commit();
}
}
}
Fragment与Activity的交互
1)组件获取
Fragment获得Activity中的组件: getActivity().findViewById(R.id.list);
Activity获得Fragment中的组件(根据id和tag都可以):getFragmentManager.findFragmentByid(R.id.fragment1);
2)数据传递
①Activit传递数据给Fragment:
在Activity中创建Bundle数据包,调用Fragment实例的setArguments(bundle) 从而将Bundle数据包传给Fragment, 然后Fragment中调用getArguments获得 Bundle对象,然后进行解析就可以了
②Fragment传递数据给Activity