Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如果回收器视图项中的数据为空,则为';t显示视图保持架_Android_Kotlin - Fatal编程技术网

Android 如果回收器视图项中的数据为空,则为';t显示视图保持架

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

我想检查来自服务器的数据是否为空。如果不为空,则填充回收器视图项(在我的案例中为CardView),如果为空,则根本不显示CardView

在我的回收器视图适配器中,我有以下内容:

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应该可以