如何在RecyclerView的Adapter中获取之前的位置?

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

我有一个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
}

请帮助我解决这个问题

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

你的崩溃只是发生在 position0 然后 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
}
© www.soinside.com 2019 - 2024. All rights reserved.