因为Android设备尺寸大小不一 同一应用在不同尺寸上显示会有很大差异,fragment就是为了解决这个问题推出的。fragment可以看做是Activity界面的一部分,它有属于自己的生命周期和事件处理机制而且它可以动态的添加、替换、移除。
【Fragment是依赖于Activity的,不能独立存在的。
一个Activity里可以有多个Fragment。
一个Fragment可以被多个Activity重用。
Fragment有自己的生命周期,并能接收输入事件。
我们能在Activity运行时动态地添加或删除Fragment。】
2.1静态
Step 1:定义Fragment的布局,就是fragment显示内容的
Step 2:自定义一个Fragment类,需要继承Fragment或者他的子类,重写onCreateView()方法 在该方法中调用:inflater.inflate()方法加载Fragment的布局文件,接着返回加载的view对象
Step 3:在需要加载Fragment的Activity对应的布局文件中添加fragment的标签, 记住,name属性是全限定类名哦,就是要包含Fragment的包名
Step 4: Activity在onCreate( )方法中调用setContentView()加载布局文件即可!
class LeftFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.left_fragment, container, false)
}
}
重写了Fragment的onCreateView()方法,然后在这个方法中通过 LayoutInflater的inflate()方法将刚才定义的left_fragment布局动态加载进来
2.2动态
activity_main.xml布局中声明一个FrameLayout
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button.setOnClickListener {
replaceFragment(AnotherRightFragment())
}
replaceFragment(RightFragment())
}
private fun replaceFragment(fragment: Fragment) {
val fragmentManager = supportFragmentManager
val transaction = fragmentManager.beginTransaction()
transaction.replace(R.id.rightLayout, fragment)
transaction.commit()
} }
动态添加Fragment主要分为5步。
(1) 创建待添加Fragment的实例。
(2) 获取FragmentManager,在Activity中可以直接调用getSupportFragmentManager()
方法获取。
(3) 开启一个事务,通过调用beginTransaction()方法开启。
(4) 向容器内添加或替换Fragment,一般使用replace()方法实现,需要传入容器的id和待添 加的Fragment实例。
(5) 提交事务,调用commit()方法来完成。
Fragment生命周期和Activity生命周期一样,不过Fragment还提供了一些附加的回调方法,下面我们就重点看一 下这几个回调。
onAttach():当Fragment和Activity建立关联时调用。
onCreateView():为Fragment创建视图(加载布局)时调用。
onActivityCreated():确保与Fragment相关联的Activity已经创建完毕时调用。
onDestroyView():当与Fragment关联的视图被移除时调用。
onDetach():当Fragment和Activity解除关联时调用。