更改底部工作表中的片段

时间:2019-08-20 17:30:54

标签: java android kotlin bottom-sheet

我有两个底稿片段,授权和注册。我可以一个打开另一个,但是看起来不太好。我想用一个底片中的另一个替换一个片段。有可能吗?

1 个答案:

答案 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
}