在我的应用程序中,我想使用
Recyclerview
并显示来自服务器的一些数据。 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
我的代码结果如下:
[]
现在是 11(点),但只需设置 alpha 一次!应将 alpha 设置为 7 - 8 - 9 - 10 。
为什么只将 alpha 设置为 10 ?
我该如何修复它并为所有更少的时间设置 alpha?
您可以在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。因此,在比较它们之前,您必须将这些字符串解析为整数(或长整型/双精度型)。