Android BottomSheetDialogFragment.viewBinding

Android BottomSheetDialogFragment.viewBinding,android,android-viewbinding,Android,Android Viewbinding,我很难为底部图纸上的ViewBinding执行属性委托 总体思路与此类似 对于碎片,我使用类似 fun Fragment.viewBinding(viewBindingFactory:(视图)->T)= FragmentViewBindingDelegate(此,viewBindingFactory) 在BottomSheetsDialogFragments上,它不接受委托 fun <T : ViewBinding> BottomSheetDialogFragment.viewBi

我很难为底部图纸上的ViewBinding执行属性委托

总体思路与此类似

对于碎片,我使用类似

fun Fragment.viewBinding(viewBindingFactory:(视图)->T)=
FragmentViewBindingDelegate(此,viewBindingFactory)
在BottomSheetsDialogFragments上,它不接受委托

fun <T : ViewBinding> BottomSheetDialogFragment.viewBinding(viewBindingFactory: (View) -> T) =
FragmentViewBindingDelegate(this, viewBindingFactory)
viewBinding(viewBindingFactory:(视图)->T)= FragmentViewBindingDelegate(此,viewBindingFactory) 底部板材的生命周期将与常规碎片的生命周期相同,因此我预计不会出现任何问题


有人提出了解决方案吗?

与Fragment类不同,
BottomSheetDialogFragment
没有接受布局资源的构造函数

您可以为其创建自定义对话框。基本上,从
AppCompatDialogFragment
BottomSheetDialogFragment
复制所有内容,您仍然可以使用Gabor的和扩展名。 您还需要在
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
    }
}

听起来他们需要在其中一个jetpack版本中改变这一点。我想知道为什么从来没有这么做过,你可以在这里或reddit
BottomSheetDialogFragment
上创建一个问题或尝试联系一位jetpack开发人员,它不是jetpack的一部分-它是材料设计组件的一部分。你想对他们提起诉讼。@ianhanniballake是的,但它扩展了AppCompatDialogFragment,而AppCompatDialogFragment并没有使用layout res公开构造函数。请在将来的更新中添加它。我相信谷歌的一部分就是要这样做的。我不知道Jetpack或MDC。这不是我找到的最好的答案吗。谢谢
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
    }
}