【问题标题】:my list (Recyclerview) displays on multiple screens want to change the background colour of list item on only one screen我的列表(Recyclerview)显示在多个屏幕上想要仅在一个屏幕上更改列表项的背景颜色
【发布时间】:2022-01-23 09:54:03
【问题描述】:

这是我的 viewholderClass,它在多个屏幕上显示列表。

 class TagViewHolder(itemView: View, listener: RecyclerViewItemClickListener?,isTraining: Boolean) : BaseViewHolder<AdapterTag>(itemView, listener) {
        override fun onBindView(context: Context, data: AdapterTag ) {
            itemView.tag_icon.setImageResource(data.getIconResId())
            itemView.tag_name.text = data.getTitle()
            itemView.tag_count.text = "[${data.getItemCount()}]"
//background color change of selected item in list
            itemView.isSelected = (data.getItemCount() == 0)
        }
    }

这是我的可绘制类,它在下面的可绘制类中实现背景颜色的变化。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <corners android:radius="@dimen/card_radius" />
            <padding android:bottom="@dimen/card_vertical_padding"
                android:left="@dimen/card_horizontal_padding"
                android:right="@dimen/card_horizontal_padding"
                android:top="@dimen/card_vertical_padding" />
            <solid android:color="@color/cardBackgroundWithZeroItem"/>
        </shape>
    </item>
</selector>

这是我的列表背景类,它改变了 selected_state 中的背景颜色。

 <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_selected="true" android:drawable="@drawable/training_tag_card_state"/>
        <item>
            <shape android:shape="rectangle">
                <corners android:radius="@dimen/card_radius" />
                <padding android:bottom="@dimen/card_vertical_padding"
                    android:left="@dimen/card_horizontal_padding"
                    android:right="@dimen/card_horizontal_padding"
                    android:top="@dimen/card_vertical_padding" />
                <solid android:color="@color/cardBackground"/>
            </shape>
        </item>
    </selector>

我的回收站视图列表显示在多个屏幕上,但我必须仅在特定屏幕上更改列表项的背景颜色,但在 tagViewHolder 中,它会更改每个屏幕上列表项的背景颜色 如何使用 isTraining:Boolean(它适用于我的屏幕,我想更改列表项的背景颜色)以便我可以在所需的列表项屏幕上使用背景颜色。我应该怎么做改变实现以获得上述问题的解决方案。

【问题讨论】:

    标签: android android-layout android-recyclerview android-xml android-drawable


    【解决方案1】:

    将任何值从活动传递给适配器。根据该布尔值,您已更改背景。

    【讨论】:

    • 这里 isTraining 未使用以及如何使用它来获得所需的结果(这样我可以在所需的列表项屏幕上使用背景颜色)
    【解决方案2】:

    您需要通过适配器传递 isTraining 布尔值

    例如:您有 2 个活动

    A 和 B,您只想更改 A Activity 中的列表项背景,因为您需要传递 isTraining 值 True

       if (isTraining) {
            itemView.parentView.background =
                ContextCompact.getDrawable(itemView.parentView.context, R.drawable.resourceid)
        } else {
            //Default value
            ContextCompact.getDrawable(itemView.parentView.context, R.drawable.resourceid)
        }
    

    【讨论】:

    • 问题是我有 2 个不同的适配器用于 2 个屏幕(两个适配器的 BAse 适配器)和一个用于 itemCount 和不同 listItem 类型的主适配器,所以我想出了解决方案,但我没有知道如何实现它 1. 将它添加(isTraining)到构造函数(TagViewHolder)的参数并传递(将其作为成员变量保存并在执行bindView()时引用它) 2. 添加到bindView的参数( ) 并通过
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 2021-02-07
    • 2013-10-26
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多