【问题标题】:RecyclerView: No adapter attached; skipping layout - kotlinRecyclerView:没有附加适配器;跳过布局 - kotlin
【发布时间】:2021-11-09 02:53:15
【问题描述】:

我知道这个问题已经发布,但似乎都发布在 java 代码中。我只是想实现一个小例子recyclerView。不知道我做错了什么,任何见解都会很棒,TIA。

MainActivity.kt

package com.wildcardev.androidtest1

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import androidx.recyclerview.widget.LinearLayoutManager
import com.wildcardev.androidtest1.adapters.RecyclerAdapter
import com.wildcardev.androidtest1.databinding.ActivityMainBinding
import com.wildcardev.androidtest1.models.TestDataObj

fun addDataToList(arrayList:ArrayList<TestDataObj>): ArrayList<TestDataObj>{
    arrayList.add(TestDataObj("tes1", "test2", "test3"))
    arrayList.add(TestDataObj("test2", "testt2", "testt2"))
    arrayList.add(TestDataObj("tes12", "test22", "test32"))
    arrayList.add(TestDataObj("tes13", "test23", "test33"))
    arrayList.add(TestDataObj("tes14", "test24", "test34"))
    arrayList.add(TestDataObj("tes15", "test25", "test35"))
    return arrayList
}


class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding
     val testList: ArrayList<TestDataObj> = ArrayList()
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(R.layout.activity_main)
        val list = addDataToList(testList)
        Log.d("TEST1","$list")
        Log.d("TEST1","${binding.recyclerView}")

        binding.recyclerView.layoutManager = LinearLayoutManager(this@MainActivity)
        val adapter = RecyclerAdapter(list)
        binding.recyclerView.adapter = adapter

    }

}

TestDataObj.kt 包 com.wildcardev.androidtest1.models

data class TestDataObj(
   val title: String,
   val description: String,
   val date: String
)

RecyclerAdapter.kt 包 com.wildcardev.androidtest1.adapters

import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.wildcardev.androidtest1.R
import com.wildcardev.androidtest1.models.TestDataObj

class RecyclerViewHolder(view: View): RecyclerView.ViewHolder(view){
    var title: TextView = view.findViewById(R.id.title)
    var description: TextView = view.findViewById(R.id.description)
    var date: TextView = view.findViewById(R.id.date)
}

class RecyclerAdapter(private var list: ArrayList<TestDataObj>): RecyclerView.Adapter<RecyclerViewHolder>() {
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerViewHolder {
        Log.d("onCreateView", "INHOLDERcreate")
        val view = LayoutInflater.from(parent.context).inflate(R.layout.activity_main, parent, false)
        return RecyclerViewHolder(view)
    }

    override fun onBindViewHolder(holder: RecyclerViewHolder, position: Int) {
        Log.d("ADAPTER", "INBINDfunc")
        val item = list[position]

        holder.title.text = item.title
        holder.description.text = item.description
        holder.date.text = item.date
    }

    override fun getItemCount(): Int {
        Log.d("COUNT",".getItemCountcalled")
        return list.size
    }
} 

【问题讨论】:

  • 与 Kotlin/Java 无关。您需要使用binding.root 而不是R.layout.activity_main 调用setContentView()developer.android.com/topic/libraries/view-binding#activities
  • 很好,仍然收到该错误。我也修改为“TextView?”在类 RecyclerViewHolder
  • 好吧,这并不是一个真正的错误,但如果你仍然得到它,那么你有一些其他的 RecyclerView 正在布置,没有附加 Adapter,但这里没有足够的信息以便我们能够告诉您更具体的信息。
  • 谢谢,我认为代码中可能存在明显错误。感谢您指出使用“binding.root”

标签: android kotlin


【解决方案1】:

试试

绑定 = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root)

【讨论】:

    【解决方案2】:

    我解决了我的问题。使用 viewBinding/dataBinding 时,需要将 dataBinding 传递给 viewHolder。不幸的是,我没有得到这个,因为我只是按照使用合成导入的教程进行操作。所以我将我的适配器代码更改为以下

    RecyclerAdapter.kt

        package com.wildcardev.androidtest1.adapters
    
    import android.util.Log
    import android.view.LayoutInflater
    import android.view.ViewGroup
    import android.widget.TextView
    import androidx.recyclerview.widget.RecyclerView
    import com.wildcardev.androidtest1.models.TestDataObj
    import com.wildcardev.androidtest1.databinding.ListItemBinding
    
    class RecyclerViewHolder(viewDataBinding: ListItemBinding): RecyclerView.ViewHolder(viewDataBinding.root){
        var title: TextView? = viewDataBinding.title
        var description: TextView? = viewDataBinding.description
        var date: TextView? = viewDataBinding.date
    }
    
    class RecyclerAdapter(private var list: ArrayList<TestDataObj>): RecyclerView.Adapter<RecyclerViewHolder>() {
        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerViewHolder {
            Log.d("onCreateView", "INHOLDERcreate")
            val binding = ListItemBinding.inflate(LayoutInflater.from(parent.context),parent,false)
            return RecyclerViewHolder(binding)
        }
    
        override fun onBindViewHolder(holder: RecyclerViewHolder, position: Int) {
            Log.d("ADAPTER", "INBINDfunc $holder")
            val item = list[position]
    
            holder.title?.text = item.title
            holder.description?.text = item.description
            holder.date?.text = item.date
        }
    
        override fun getItemCount(): Int {
            Log.d("COUNT",".getItemCountcalled ${list.size}")
            return list.size
        }
    } 
    

    【讨论】:

      猜你喜欢
      • 2020-01-09
      • 2021-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-12
      • 1970-01-01
      相关资源
      最近更新 更多