首页 > 解决方案 > Recyclerview 没有附加适配器;跳过布局(Kotlin)

问题描述

我想知道我在这里做错了什么。我正在 Kotlin 中构建一个 CRUD 应用程序,并且我正在使用 recyclerview 来制作 readData 页面。问题是,当我在 readData 页面上时没有显示任何内容,只显示文本视图,所以我进行了调试,当我加入页面时,显示此消息:“Recyclerview No adapter attach; skipping layout”

这是我的代码:(我是巴西人,所以有些词是葡萄牙语,但你会明白的。)

verDados.kt

package com.nicolas.csrd

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.Toast
import com.google.firebase.database.*
import kotlinx.android.synthetic.main.activity_ver_database.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext

class verDados : AppCompatActivity() {
    private lateinit var database: FirebaseDatabase
    private lateinit var reference: DatabaseReference

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_ver_database)

        database = FirebaseDatabase.getInstance()
        reference = database.getReference("usuarios")

        verDados()

        btn_voltar.setOnClickListener() {
            startActivity(Intent(this@verDados, Dashboard::class.java))
            finish()
        }
    }

    private fun verDados() {
        reference.addValueEventListener(object: ValueEventListener{

            override fun onCancelled(p0: DatabaseError) {
                Log.e("cancelar", p0.toString())
            }

            override fun onDataChange(p0: DataSnapshot) {
                //Colocando os usuarios numa lista
                var list = ArrayList<DatabaseModelo>()

                for (data in p0.children) {
                    val model = data.getValue(DatabaseModelo::class.java)
                    list.add(model as DatabaseModelo)
                }
                if (list.size > 0) {
                    val ususariosModelo = usuariosModelo(list)
                    recyclerview.adapter = ususariosModelo
                }

            }
        })
    }
}

数据库模型

package com.nicolas.csrd

class DatabaseModelo() {
    lateinit var email: String
    lateinit var senha: String

    constructor(email: String, senha: String) : this() {
        this.email = email
        this.senha = senha
    }
}

usuariosModelo.kt (recyclerview 适配器)

package com.nicolas.csrd

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.view.menu.ActionMenuItemView
import androidx.appcompat.view.menu.MenuView
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.usuarios_modelo.view.*


class usuariosModelo(val list: ArrayList<DatabaseModelo>): RecyclerView.Adapter<usuariosModelo.ViewHolder>() {

    class ViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
        val email = itemView.campo_email
        val senha = itemView.campo_senha
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        return ViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.usuarios_modelo, parent, false))
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.email.text = list[position].email
        holder.senha.text = list[position].senha
    }

    override fun getItemCount(): Int {
        return list.size
    }
}

----- XML 文件 -----

activity_ver_database.xml(读取数据页)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/dark"
    tools:context=".Login">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:gravity="center_horizontal" >

        <ImageView
            android:id="@+id/btn_voltar"
            android:layout_width="50dp"
            android:layout_height="30dp"
            android:layout_gravity="start"
            android:layout_marginStart="5dp"
            android:layout_marginTop="23dp"
            android:src="@drawable/back_arrow" />


        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="DADOS"
            android:textColor="#7ec1d1"
            android:textSize="30sp"
            android:textStyle="bold"
            android:layout_marginTop="20dp"
            android:letterSpacing="0.15"
            android:fontFamily="@font/montserrat_medium"
            />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Todos os usuários cadastrados"
            android:textColor="#7ec1d1"
            android:textSize="20sp"
            android:textStyle="bold"
            android:layout_marginTop="0dp"

            android:fontFamily="@font/montserrat_thin"
            />

        <androidx.recyclerview.widget.RecyclerView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/recyclerview"
            android:layout_margin="10sp"/>


        <TextView
            android:id="@+id/btn_cadastrar"
            android:layout_width="350dp"
            android:layout_height="50dp"
            android:layout_marginTop="30dp"
            android:backgroundTint="#7ec1d1"
            android:gravity="center_horizontal"
            android:fontFamily="@font/montserrat_regular"
            android:text="Deseja cadastrar alguém? Clique aqui."
            android:textColor="@color/white2"
            android:textSize="15sp" />
    </LinearLayout>
</LinearLayout>

标签: androidkotlinandroid-recyclerview

解决方案


您收到此错误是因为您没有为RecyclerView正在使用的适配器定义适配器。在您的方法中的某个地方onCreate,创建适配器并将其设置为RecyclerView. 就像是:

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_ver_database)

        recyclerView = findViewById(R.id.recyclerview)
        recyclerView.apply {
            adapter = usuariosModelo(listOfItems)
        }

        database = FirebaseDatabase.getInstance()
        reference = database.getReference("usuarios")

        verDados()

        btn_voltar.setOnClickListener() {
            startActivity(Intent(this@verDados, Dashboard::class.java))
            finish()
        }
    }

推荐阅读