尝试隐藏具有空属性的卡片时,如何消除 recyclerView 中的空白?
Posted
技术标签:
【中文标题】尝试隐藏具有空属性的卡片时,如何消除 recyclerView 中的空白?【英文标题】:How can i eliminate Empty spaces in recyclerView when trying to hide cards with null properties? 【发布时间】:2021-10-14 02:12:09 【问题描述】:尝试隐藏具有空属性的卡片时,recyclerView 中的空格
嗨,我是新来的。所以这是我的第一个问题。我正在尝试将 google Books API 用于一项任务,当我实现所有内容时,我看到许多没有图片、标题或作者的书籍, 出于显而易见的原因,我不希望它们出现在应用程序的搜索中。我试图将属性card.visibility = View.GONE(在try-catch块内)应用于recyclerview中的那些cardview,但是这样做时它们会在recycler列表中留下空白,我不希望它们出现。 你怎么能解决这个问题?我附上部分代码和图像,以便您可以看到我这样做时剩余的空间
override fun onBindViewHolder(holder: LibrosHolder, position: Int)
holder.binding.apply
var autores = libros.items[position].volumeInfo.authors
tvtitulo.text = libros.items[position].volumeInfo.title
try
Glide.with(ivlibro.context)
.load(libros.items.get(position).volumeInfo.imageLinks.thumbnail)
.fitCenter()
.into(ivlibro)
tvautor.text = autores[0]
tvtitulo.text = libros.items[position].volumeInfo.title
catch (e: NullPointerException)
tarjeta.isVisible=true
tarjeta.visibility = View.GONE
ivlibro.setImageResource(R.mipmap.noimagendisponible)
tvautor.text = "Sin autor"
tvtitulo.text = "Sin título"
这就是应用在没有“visibility = View.GONE”属性的情况下的工作方式
This is how the app works without the "GONE" atribute
这是激活了“visibility = View.GONE”属性
And this is with "visibility = View.GONE" attribute activated
如您所见,cardViews 之间有很多空白空间,我该如何消除? (英语不是我的第一个 lenguaje,很抱歉,如果这很难阅读,我表示歉意)
【问题讨论】:
`tarjeta` 是指父布局吗?catch (e: NullPointerException)
hahahaha ...你为什么不先检查一些东西是否为空?
我认为在这种情况下父布局是recyclerView,而“tarjeta”是recyclerView中的每个cardView
【参考方案1】:
您需要在 onBindViewHolder 之前从 libros.items 中删除空数据。因为在你的 try catch 中,item 会被忽略
【讨论】:
【参考方案2】:有很多方法可以做你想做的事(折叠列表中的项目),但老实说,在尝试显示之前从列表中过滤掉无效数据会更容易。
类似:
// get all your books from the API, however you do that
val todosLibros = getAllTheBooks()
// filter out the bad data
val buenosLibros = todosLibros
.filterNotNull it.autores
.filterNotNull it.tvtitulo
.filterNotNull it.volumeInfo?.imageLinks?.thumbnail
// set the filtered data on your RecyclerView's adapter
// (I'm guessing you pass it in through the constructor)
recyclerView.adapter = MyCoolBooksAdapter(buenosLibros)
这样,您就不会弄乱您需要忽略的项目,您无需检查内容是否有效 - 您在将其传递给适配器之前已经检查过它!所有数据都很好,现在只是一个普通的项目列表
【讨论】:
以上是关于尝试隐藏具有空属性的卡片时,如何消除 recyclerView 中的空白?的主要内容,如果未能解决你的问题,请参考以下文章
在使用 Recycler View 时尝试在空对象引用上调用虚拟方法
在Recycler视图上添加图像视图时,Android导航抽屉动画滞后/减速