添加了界面及逻辑
This commit is contained in:
@@ -0,0 +1,141 @@
|
||||
package com.sw.platecabinet.utils
|
||||
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.FragmentManager
|
||||
|
||||
class FragmentHelper(
|
||||
private val fragmentManager: FragmentManager,
|
||||
private val containerId: Int
|
||||
) {
|
||||
|
||||
/**
|
||||
* 添加Fragment到容器中
|
||||
* @param fragment 要添加的Fragment
|
||||
* @param addToBackStack 是否添加到返回栈
|
||||
* @param tag Fragment的标签
|
||||
*/
|
||||
fun addFragment(fragment: Fragment, addToBackStack: Boolean = false, tag: String? = null) {
|
||||
fragmentManager.beginTransaction().apply {
|
||||
add(containerId, fragment, tag)
|
||||
if (addToBackStack) {
|
||||
addToBackStack(tag)
|
||||
}
|
||||
commit()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 替换容器中的Fragment
|
||||
* @param fragment 要替换的Fragment
|
||||
* @param addToBackStack 是否添加到返回栈
|
||||
* @param tag Fragment的标签
|
||||
* @param animEnter 进入动画
|
||||
* @param animExit 退出动画
|
||||
* @param animPopEnter 弹出进入动画
|
||||
* @param animPopExit 弹出退出动画
|
||||
*/
|
||||
fun replaceFragment(
|
||||
fragment: Fragment,
|
||||
addToBackStack: Boolean = true,
|
||||
tag: String? = null,
|
||||
animEnter: Int = 0,
|
||||
animExit: Int = 0,
|
||||
animPopEnter: Int = 0,
|
||||
animPopExit: Int = 0
|
||||
) {
|
||||
fragmentManager.beginTransaction().apply {
|
||||
if (animEnter != 0 || animExit != 0 || animPopEnter != 0 || animPopExit != 0) {
|
||||
setCustomAnimations(animEnter, animExit, animPopEnter, animPopExit)
|
||||
}
|
||||
replace(containerId, fragment, tag)
|
||||
if (addToBackStack) {
|
||||
addToBackStack(tag)
|
||||
}
|
||||
commit()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 显示Fragment
|
||||
* @param fragment 要显示的Fragment
|
||||
*/
|
||||
fun showFragment(fragment: Fragment) {
|
||||
fragmentManager.beginTransaction()
|
||||
.show(fragment)
|
||||
.commit()
|
||||
}
|
||||
|
||||
/**
|
||||
* 隐藏Fragment
|
||||
* @param fragment 要隐藏的Fragment
|
||||
*/
|
||||
fun hideFragment(fragment: Fragment) {
|
||||
fragmentManager.beginTransaction()
|
||||
.hide(fragment)
|
||||
.commit()
|
||||
}
|
||||
|
||||
/**
|
||||
* 移除Fragment
|
||||
* @param fragment 要移除的Fragment
|
||||
*/
|
||||
fun removeFragment(fragment: Fragment) {
|
||||
fragmentManager.beginTransaction()
|
||||
.remove(fragment)
|
||||
.commit()
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回上一个Fragment
|
||||
* @return 是否成功返回
|
||||
*/
|
||||
fun popBackStack(): Boolean {
|
||||
return fragmentManager.popBackStackImmediate()
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回到指定的Fragment
|
||||
* @param tag Fragment的标签
|
||||
* @param inclusive 是否包含指定的Fragment
|
||||
*/
|
||||
fun popBackStackTo(tag: String, inclusive: Boolean = false): Boolean {
|
||||
return fragmentManager.popBackStackImmediate(
|
||||
tag,
|
||||
if (inclusive) FragmentManager.POP_BACK_STACK_INCLUSIVE else 0
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前显示的Fragment
|
||||
*/
|
||||
fun getCurrentFragment(): Fragment? {
|
||||
return fragmentManager.findFragmentById(containerId)
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过tag查找Fragment
|
||||
*/
|
||||
fun findFragmentByTag(tag: String): Fragment? {
|
||||
return fragmentManager.findFragmentByTag(tag)
|
||||
}
|
||||
|
||||
/**
|
||||
* 清除所有Fragment
|
||||
*/
|
||||
fun clearAllFragments() {
|
||||
// 清除所有回退栈中的Fragment
|
||||
fragmentManager.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE)
|
||||
|
||||
// 清除所有已添加的Fragment
|
||||
fragmentManager.fragments.forEach { fragment ->
|
||||
removeFragment(fragment)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查返回栈是否为空
|
||||
*/
|
||||
fun isBackStackEmpty(): Boolean {
|
||||
return fragmentManager.backStackEntryCount == 0
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user