1

我很难在 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 的生命周期与常规片段的生命周期相同,因此我预计不会出现任何问题。

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

4

3 回答 3

6

您仍然可以使用来自 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
    }
}
于 2021-04-27T21:52:46.683 回答
0

像这样在BottomSheetFragment中实现ViewBinding(对我有用):

class CustomBottomSheet : BottomSheetDialogFragment() {

private lateinit var binding: CustomBottomSheetBinding

override fun onCreateView(
    inflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?
): View {
    binding = CustomBottomSheetBinding.inflate(inflater, container, false)
    return binding.root
}

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

    //onClick listener
    binding.button.setOnClickListener {
        Toast.makeText(context, "Clicked", Toast.LENGTH_LONG).show()
    }
}

}

于 2021-09-01T08:58:12.800 回答
-1

与 Fragment 类不同,BottomSheetDialogFragment它没有接受布局资源的构造函数。
您可以为其创建自定义对话框。AppCompatDialogFragment基本上,从和复制所有内容BottomSheetDialogFragment

于 2021-03-12T14:37:41.803 回答