首页 > 解决方案 > BottomSheetDialogFragment.viewBinding

问题描述

我很难在 BottomSheets 上为 ViewBinding 做一个属性委托。

大体思路是这样的

对于片段我使用这样的东西

fun <T : ViewBinding> Fragment.viewBinding(viewBindingFactory: (View) -> T) =
FragmentViewBindingDelegate(this, viewBindingFactory)

在作为 Fragments 的 BottomSheetsDialogFragments 上,它不接受委托。

fun <T : ViewBinding> BottomSheetDialogFragment.viewBinding(viewBindingFactory: (View) -> T) =
FragmentViewBindingDelegate(this, viewBindingFactory)

BottomSheets 的生命周期与常规片段的生命周期相同,因此我预计不会出现任何问题。

有人对此提出解决方案吗?

标签: androidandroid-viewbinding

解决方案


您仍然可以使用来自 Gabor 的FragmentViewBindingDelegate和扩展。你只需要给里面的视图充气onCreateView()

例如:

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import com.zhuinden.fragmentviewbindingdelegatekt.viewBinding


class ExampleBottomSheet : BottomSheetDialogFragment() {

    //Using ::bind here since the view is already inflated in onCreateView()
    private val binding by viewBinding(YourCustomViewBinding::bind)


    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        return inflater.inflate(R.layout.your_custom_view, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        //Use binding here or wherever you need it
    }
}

推荐阅读