首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BottomSheetDialogFragment.viewBinding

BottomSheetDialogFragment.viewBinding
EN

Stack Overflow用户
提问于 2021-03-12 22:01:27
回答 3查看 1.2K关注 0票数 1

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

大体思路与此类似

对于片段,我使用类似于this的内容

代码语言:javascript
复制
fun <T : ViewBinding> Fragment.viewBinding(viewBindingFactory: (View) -> T) =
FragmentViewBindingDelegate(this, viewBindingFactory)

在是片段的BottomSheetsDialogFragments上,它不接受委托。

代码语言:javascript
复制
fun <T : ViewBinding> BottomSheetDialogFragment.viewBinding(viewBindingFactory: (View) -> T) =
FragmentViewBindingDelegate(this, viewBindingFactory)

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

有人想出了解决这个问题的办法吗?

EN

回答 3

Stack Overflow用户

发布于 2021-04-28 05:52:47

您仍然可以使用Gabor的FragmentViewBindingDelegate和扩展。您只需要在onCreateView()中放大视图即可。

例如:

代码语言:javascript
复制
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
    }
}
票数 6
EN

Stack Overflow用户

发布于 2021-09-01 08:58:13

BottomSheetFragment中实现ViewBinding,如下所示(适用于我):

代码语言:javascript
复制
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()
    }
}

}

票数 0
EN

Stack Overflow用户

发布于 2021-03-12 22:37:42

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

您可以为其创建自定义对话框。基本上,从AppCompatDialogFragmentBottomSheetDialogFragment复制所有内容。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66601332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档