优化ViewHolder成员的代码结构-Kotlin

g0czyy6m  于 2023-02-24  发布在  Kotlin
关注(0)|答案(1)|浏览(461)

我有一个ViewHolder,它看起来像这样:

class ViewHolder(
        itemView: View,
        var mSettingsRadioButton: RadioButton = itemView.findViewById(...),
        var mSettingsCheckBox: CheckBox = itemView.findViewById(...),
        var mSettingsChevron: Icon = itemView.findViewById(...)
    ) : RecyclerView.ViewHolder(itemView)

这个想法是使其他两个不可见时,其中之一是活动的,即如果一个复选框是活动的,V形和单选按钮应该是不可见的。
现在我正在使用3个函数来实现这个目的,如下所示:

fun setCheckbox(viewHolder: ViewHolder) {
        viewHolder.apply {
            mSettingsChevron.visibility = GONE
            mSettingsRadioButton.visibility = GONE
            mSettingsCheckBox.let {
                it.visibility = VISIBLE
                it.isChecked = false
            }
        }
    }

虽然这种方法的作品,我有3个功能,实际上是做同样的事情。我正在寻找更清洁和优化的方式来编写这个功能。任何建议都非常感谢。谢谢!

nkoocmlb

nkoocmlb1#

如果你只想使用一个函数,你可以,它会删除冗余代码,所以你会实现干原则。

fun setVisibility(isCheckBoxVisible: Boolean, isRadioButtonVisible: Boolean, isChevronVisible: Boolean) {
    mSettingsCheckBox.visibility = if (isCheckBoxVisible) View.VISIBLE else View.GONE
    mSettingsRadioButton.visibility = if (isRadioButtonVisible) View.VISIBLE else View.GONE
    mSettingsChevron.visibility = if (isChevronVisible) View.VISIBLE else View.GONE
}

现在你只需调用setVisibility

// Show only the checkbox
viewHolder.setVisibility(true, false, false)

// Show only the radio button
viewHolder.setVisibility(false, true, false)

// Show only the chevron
viewHolder.setVisibility(false, false, true)

// And if you need
// Hide all views
viewHolder.setVisibility(false, false, false)

相关问题