Android 如果回收器视图项中的数据为空,则为';t显示视图保持架
我想检查来自服务器的数据是否为空。如果不为空,则填充回收器视图项(在我的案例中为CardView),如果为空,则根本不显示CardView 在我的回收器视图适配器中,我有以下内容:Android 如果回收器视图项中的数据为空,则为';t显示视图保持架,android,kotlin,Android,Kotlin,我想检查来自服务器的数据是否为空。如果不为空,则填充回收器视图项(在我的案例中为CardView),如果为空,则根本不显示CardView 在我的回收器视图适配器中,我有以下内容: override fun onBindViewHolder(holder: ViewHolder, position: Int) { var firstName = itemsList[position].firstName var lastName = itemsList[position].las
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
var firstName = itemsList[position].firstName
var lastName = itemsList[position].lastName
if (firstName.isNullOrEmpty() && lastName.isNullOrEmpty()) {
//...what shoud i write here ?
} else {
holder.name?.text = firstName + " " + lastName
}
}
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val name = itemView.name
}
你应该这样做:
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
var firstName = itemsList[position].firstName
var lastName = itemsList[position].lastName
if (firstName.isNullOrEmpty() && lastName.isNullOrEmpty()) {
yourCardView.visibility = View.INVISIBLE //or GONE if you do not want to keep its space
holder.name?.text = ""
} else {
yourCardView.visibility = View.VISIBLE
holder.name?.text = firstName + " " + lastName
}
}
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val name = itemView.name
}
但是,如果cardview是您的根项,并且您根本不想显示列表项,则应在适配器构造函数中使用如下代码更改主列表:
filteredList = itemsList?.filter {
(it.firstname.isNullOrEmpty() || it.lastName.isNullOrEmpty()).not()
}
即使您更改了
CardView
的可见性,RecyclerView
中的间隙也会存在在设置适配器之前,最好从列表中删除空项:
list.removeIf { it.firstName.isNullOrEmpty() && it.lastName.isNullOrEmpty() }
我认为这应该通过
RecyclerView.Adapter的getItemViewType
方法来处理,你能告诉我具体怎么做吗?我对此比较陌生。我可以用另一种方式设置我的cardView可见性吗?我无法在适配器中访问它。如果列表项中有cardview,则应在ViewHolder中找到它,并与holder.name相同访问它(例如holder.cardview.visibility)但如果cardview在您的活动中,您应该通过传递在您的活动中实现的接口来隐藏它,或者将其传递到适配器构造函数中,或者感谢您,它现在可以正常工作。还有一件事…即使我将可见性设置为View.GONE,cardView的空间仍会显示在列表中。设置项目的高度包装内容,并在活动中添加以下代码:recyclerView.hasFixedSize=false应该可以