【问题标题】:ViewBinding with 2 possible layouts具有 2 种可能布局的 ViewBinding
【发布时间】:2020-12-18 10:23:35
【问题描述】:

我正在迁移到视图绑定,并且我有一个片段,我根据变量使用 2 种不同的布局。基本上是这样的。

override fun onCreateView(
    inflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?
) = inflater.inflate(

    when (ussdType) {
        UssdType.USSD_TYPE -> R.layout.fragment_transaction
        else -> R.layout.fragment_balance 
    }, container, false
)

问题是,如果我将其重构为视图绑定,我将需要 2 种类型的视图绑定(FragmentTransactionBinding 和 FragmentBalanceBinding),例如使用按钮元素。

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

    continue_button.setOnClickListener { onContinueAction(it) }

}

我不知道如何继续,因为我有 2 个不同的视图绑定

【问题讨论】:

    标签: android android-viewbinding


    【解决方案1】:

    只需创建两个代表 viewBinding 的变量

    private lateinit var bindingTransaction: FragmentTransactionBinding
    private lateinit var bindingBalance: FragmentBalanceBinding
    

    并膨胀其中一个取决于您的ussdType

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
            return when (ussdType) {
                UssdType.USSD_TYPE -> {
                    bindingTransaction = FragmentTransactionBinding.inflate(inflater, container, false)
                    bindingTransaction.root
                }
                else -> {
                    bindingBalance = FragmentBalanceBinding.inflate(inflater, container, false)
                    bindingBalance.root
                }
            }
        }
    

    【讨论】:

    • 这里真正的问题是,即使我只是将一个布局元素作为示例,它也有很多我需要使用的内容,因此使用此解决方案我将不得不编写 2 次相同的代码(1 次每个布局)
    • 所以也许您不需要 2 个行为相似的不同布局?
    猜你喜欢
    • 2012-01-16
    • 1970-01-01
    • 2015-06-10
    • 2014-03-21
    • 1970-01-01
    • 2016-10-29
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多