原文地址:http://jbblog.top/MyBlog/html/blogpagecontent.html?id=54
用kotlin使用fragment比java方便。
回顾一下再Java中实现fragment的添加http://jbblog.top/blogpagecontent.html?id=3
**第一步:**
这就是FragmentManager的扩展函数,接收一个Lambda表达式接收器作为参数,FragmentTransaction作为接收器
inline fun FragmentManager.inTransaction(func: FragmentTransaction.() -> Unit) {
val fragmentTransaction = beginTransaction()
fragmentTransaction.func()
fragmentTransaction.commit()
}
**我们可以完善一下inTransaction,让lambda表达式返回FragmentTransaction**
inline fun FragmentManager.inTransaction(func: FragmentTransaction.() -> FragmentTransaction) {
beginTransaction().func().commit()
}
**接下来,我们看一下使用AppCompatActivity的扩展函数比ActivityUtil工具类好在哪里我们可以实现AppCompatActivity的扩展函数addFragment和replaceFragment:**
fun AppCompatActivity.addFragment(fragment: Fragment, frameId: Int){
supportFragmentManager.inTransaction { add(frameId, fragment) }
}
fun AppCompatActivity.replaceFragment(fragment: Fragment, frameId: Int) {
supportFragmentManager.inTransaction{replace(frameId, fragment)}
}
由于这是对AppCompatActivity本身的扩展函数,我们可以在函数内部直接访问supportFragmentManager.
使用上面的扩展函数,我们在Activity中添加或者替换Fragment可以一行代码实现,不需要任何修饰符:
addFragment(fragment, R.id.fragment_container)
replaceFragment(fragment, R.id.fragment_container)
Fragment 推荐使用v4包里面的。
创建Fragment继承即可:
class HomeFrg : Fragment()