我有一个RecyclerView,在它的布局里有一个视图 "tvDateGrouped",我想让它只在当前位置日期和前一个位置日期不一样的时候才显示。下面是我试过的代码,但是没有用。
这段代码在适配器类的onBind()方法里面。
if (position != 0 && transactions[position].date ==
transactions[holder.adapterPosition.minus(1)].date) {
holder.view.tvDateGrouped.visibility = View.GONE
} else {
holder.view.tvDateGrouped.text = formattedDateString
}
如果我改变了位置 != 1 , 应用程序崩溃。
以下是应用程序崩溃时的代码
if (position != 1 && transactions[position].date ==
transactions[holder.adapterPosition.minus(1)].date) {
holder.view.tvDateGrouped.visibility = View.GONE
} else {
holder.view.tvDateGrouped.text = formattedDateString
}
编辑:我把代码改成了下面的样子,但现在应用已经崩溃了--。
if ((transactions[position].date == transactions[position - 1].date) &&
(position > 0)) {
holder.view.tvDateGrouped.visibility = View.GONE
} else {
holder.view.tvDateGrouped.visibility = View.VISIBLE
holder.view.tvDateGrouped.text = formattedDateString
}
请帮助我解决这个问题
你的崩溃只是发生在 position
是 0
然后 position - 1
将是 -1
这是一个无效的索引,你会得到一个运行时异常。
但是,为什么第一个解决方案不起作用呢?一个很明显的原因就是因为你忘记了让文本再次可见。所以把它改成。
if (position > 0 && transactions[position].date == transactions[position - 1].date) {
holder.view.tvDateGrouped.visibility = View.GONE
} else {
holder.view.tvDateGrouped.visibility = View.VISIBLE
holder.view.tvDateGrouped.text = formattedDateString
}