本文共 2691 字,大约阅读时间需要 8 分钟。
一、什么是Fragment?
1、Fragment是activity的界面中的一部分;多个Fragment们组合到一个activity中;多个activity中可重用一个Fragment。即Fragment相当于模块化的一段activity;
2、具有自己的生命周期,接收自己的事件; 3、在activity运行时被添加或删除。二、为什么要使用Fragment?
1、支持更动态灵活的界面设计;2、activity的layout分成Fragment。
三、如何使用Fragment?
1、Create Fragment类 — onCreate() onCreateView() onPause()
2、Add Fragment
(1) Layout
activity_fragment.xml布局文件里添加如上代码后,运行,报如下错误:非法状态异常,Fragment没有创建View。
解决方法:
首先新建一个view布局文件如之前第二周写的item_listview.xml:然后在FragmentTest类的onCreateView()方法里获取view:
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.item_listview,container); return view; }
(2)Java Code
FragmentManager;
FragmentTransaction; Add/Remove
FragmentTestActivity类
package com.example.chenjinhua.redcircle;import android.app.Activity;import android.app.FragmentManager;import android.app.FragmentTransaction;import android.os.Bundle;/** * Created by chenjinhua on 16/3/19. */public class FragmentTestActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_fragment); FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); FragmentTest fragmentTest = new FragmentTest(); fragmentTransaction.add(R.id.fragment_test_view,fragmentTest).commit(); }}
activity_fragment.xml布局文件:
FragmentTest类 同上。
运行报如下错误:FragmentTestActivity类里fragment_test_view是父view;FragmentTest类里item_listview是子view。
解决办法:修改FragmentTest类里的onCreateView()方法
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //解析出来的xml视图放到container里,不绑定 View view = inflater.inflate(R.layout.item_listview,container,false); return view; }
程序运行结果:
第一个Fragment是通过布局文件生成的,第二个Fragment是通过java code生成的。删除fragment:修改FragmentTestActivity类代码为d
fragmentTransaction.add(R.id.fragment_test_view,fragmentTest); fragmentTransaction.remove(fragmentTest).commit();
四、如何管理Fragment?
1、查找Fragment — findFragmentById() 和 findFragmentByTag()
Fragment fragment = fragmentManager.findFragmentById(R.id.fragment_test); if (fragment instanceof FragmentTest){ // TODO: Do your Action. }else{ throw new IllegalStateException("iis not fragmentTest"); }
java里面的二元运算符,判断左边的对象是否是右边类的实例。假如是的话,返回true;假如不是的话,返回false
2、Fragment的后退 — Fragment Stack; popBackStack(); addOnBackStackChangedListener()
五、Fragment 生命周期
参考博客: