我有两个底稿片段,授权和注册。我可以一个打开另一个,但是看起来不太好。我想用一个底片中的另一个替换一个片段。有可能吗?
答案 0 :(得分:0)
所以。为了实现这个想法,我稍微更改了应用程序的结构。我创建了一个BaseBottomSheet
类,在该类的布局中有一个用于存放片段的容器(我设置了一个空的FrameLayout)。哪个片段将出现取决于捆绑中的标签。另外,如果您需要将一个片段更改为另一个片段,例如,通过使用按钮,我在parentFragment as BaseBottomSheet...
fun showAuthFragment() {
val fragmentTransaction = childFragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.fragmentContainer, AuthView())
fragmentTransaction.commit()
expandView()
}
fun showRegistrationFragment() {
val fragmentTransaction = childFragmentManager.beginTransaction()
fragmentTransaction.replace(R.id.fragmentContainer, RegistrationView())
fragmentTransaction.commit()
expandView()
}
此外,如果您的片段大小不同,则可能会在显示时片段不完全可见。我通过创建bottomSheetBehavior变量并在onCreateView中对其进行初始化来解决此问题*(这是必需的,仅调用和设置BottomSheetBehavior的值将不起作用)
private var bottomSheetBehavior: BottomSheetBehavior<View>? = null
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
dialog?.setOnShowListener { dialog ->
val bottomSheet = (dialog as BottomSheetDialog).findViewById<View>(R.id.design_bottom_sheet) as FrameLayout?
bottomSheetBehavior = BottomSheetBehavior.from(bottomSheet!!)
}
return inflater.inflate(R.layout.base_bottom_sheet, container, false)
}
fun expandView() {
bottomSheetBehavior?.state = BottomSheetBehavior.STATE_EXPANDED
}