如何在 RecyclerView Adapter Android 中设置启用或禁用视图

问题描述 投票:0回答:1

在我的应用程序中,我想使用

Recyclerview
并显示来自服务器的一些数据。
服务器发送给我hours,我应该检查现在的时间,如果服务器时间小于现在的时间,我应该为此设置alpha。
我在适配器中编写以下代码:

class HoursAdapter constructor(private val items: MutableList<Data>) :
    RecyclerView.Adapter<HoursAdapter.ViewHolder>() {

    private lateinit var binding: ItemVisitHoursBinding
    private lateinit var context: Context

    private val hoursList = mutableListOf<String>()

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        binding = ItemVisitHoursBinding.inflate(LayoutInflater.from(parent.context), parent, false)
        context = parent.context
        return ViewHolder()
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) = holder.bind(items[position])

    override fun getItemCount() = items.size

    inner class ViewHolder : RecyclerView.ViewHolder(binding.root) {
        @SuppressLint("SetTextI18n", "NotifyDataSetChanged")
        fun bind(item: Data) {
            binding.apply {
                // item.hour ==> show such as this format : 7-8
                hoursTxt.text = item.hour
                //Disable previous hours
                val endHour = item.hour.split("-")[1]

                Log.e("HoursLog", "End : $endHour --- Now : ${nowJustHour()}")

                if (endHour < nowJustHour()) {
                    root.alpha = 0.4f
                } else {
                    root.alpha = 1.0f
                }
            }
        }
    }
}

将此行显示到 logcat 中:

End : 8 --- Now : 11
End : 9 --- Now : 11
End : 10 --- Now : 11
End : 11 --- Now : 11
End : 12 --- Now : 11
End : 13 --- Now : 11
End : 14 --- Now : 11
End : 15 --- Now : 11
End : 16 --- Now : 11
End : 17 --- Now : 11
End : 18 --- Now : 11
End : 19 --- Now : 11
End : 20 --- Now : 11
End : 21 --- Now : 11
End : 22 --- Now : 11
End : 23 --- Now : 11

我的代码结果如下:
[enter image description here]

现在是 11(点),但只需设置 alpha 一次!应将 alpha 设置为 7 - 8 - 9 - 10
为什么只将 alpha 设置为 10 ?

(https://i.stack.imgur.com/SYfdf.png)

我该如何修复它并为所有更少的时间设置 alpha?

android kotlin android-recyclerview
1个回答
0
投票

您可以在bind方法中尝试以下if-else:

if (endHour.toInt() < nowJustHour().toInt()) {
    root.alpha = 0.4f
} else {
    root.alpha = 1.0f
}

说明:

代码的

endHour
是一个字符串,我假设
nowJustHour()
也返回一个字符串。当您使用关系运算符比较字符串时,会调用比较器方法来比较它们。此方法的变体如下所示:

public int compareTo(String anotherString) {
    int len1 = value.length;
    int len2 = anotherString.value.length;
    int lim = Math.min(len1, len2);
    char v1[] = value;
    char v2[] = anotherString.value;

    int k = 0;
    while (k < lim) {
        char c1 = v1[k];
        char c2 = v2[k];
        if (c1 != c2) {
            return c1 - c2;
        }
        k++;
    }
    return len1 - len2;
}

查看此答案以了解有关比较如何运作的更多信息。

如您所见,它不会为

"8" < "11"
提供 true。因此,在比较它们之前,您必须将这些字符串解析为整数(或长整型/双精度型)。

© www.soinside.com 2019 - 2024. All rights reserved.