android-studio - E/RecyclerView:没有附加适配器;跳过布局 / Kotlin
问题描述
我一直在 stackoverflow 和这篇博客文章上阅读不同的答案,并尝试实施他们的解决方案,但我仍然收到错误消息。代码来自 yt 教程。我希望有一个人可以帮助我。谢谢
错误 E/RecyclerView:未连接适配器;跳过布局
我的适配器
这是我的主要活动
class MainActivity : AppCompatActivity(), IDrinkLoadListener {
lateinit var drinkLoadListener: IDrinkLoadListener
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
init()
loadDrinkFromFirebase()
}
private fun loadDrinkFromFirebase() {
val drinkModels : MutableList<DrinkModel> = ArrayList()
FirebaseDatabase.getInstance()
.getReference("Drink")
.addListenerForSingleValueEvent(object: ValueEventListener{
override fun onDataChange(snapshot: DataSnapshot) {
if(snapshot.exists()) {
for (drinkSnapshot in snapshot.children) {
val drinkModel = drinkSnapshot.getValue(DrinkModel::class.java)
drinkModel!!.key = drinkSnapshot.key
drinkModels.add(drinkModel)
}
drinkLoadListener.onDrinkLoadSuccess(drinkModels)
} else
drinkLoadListener.onDrinkLoadFailed("Drink items not exist")
}
override fun onCancelled(error: DatabaseError) {
drinkLoadListener.onDrinkLoadFailed(error.message)
}
})
}
private fun init() {
drinkLoadListener = this
val gridLayoutManager = GridLayoutManager(this, 2)
recycler_drink.layoutManager = gridLayoutManager
recycler_drink.addItemDecoration(SpaceItemDecoration())
}
override fun onDrinkLoadSuccess(drinkModelList: List<DrinkModel>?) {
val adapter = MyDrinkAdapter(this,drinkModelList!!)
recycler_drink.adapter = adapter
}
override fun onDrinkLoadFailed(message: String?) {
Snackbar.make(mainLayout,message!!,Snackbar.LENGTH_LONG).show()
}
}
class SpaceItemDecoration : RecyclerView.ItemDecoration() {
override fun getItemOffsets(
outRect: Rect,
view: View,
parent: RecyclerView,
state: RecyclerView.State
) {
if(parent.getChildLayoutPosition(view) % 2 != 0)
{
outRect.top= 25
outRect.bottom= -25
}else outRect.top = 0
}
}
提前致谢!!!
解决方案
发生这种情况是因为适配器在异步操作后附加到回收器onDrinkLoadSuccess
您可以在期间将适配器附加到回收器onCreate
,然后onDrinkLoadSuccess
使用数据对其进行更新。
该类ListAdapter
有一个submit
方法。如果您使用的是普通回收器,通常是这样的:
Recycler ... {
private val dataList = mutableListOf()
fun update(list: List<YourType>) {
dataList.clear()
dataList.addAll(list)
notifyDataDetChanged() //important updates the UI
}
}
还有更具体的更新方法notifyItemRangeChanged
,例如等。
也有帮助发现数据集的差异DiffUtil.ItemCallback
推荐阅读
- visual-studio-code - 如何将每个选项卡设置为 VS Code 中的特定目录?
- python - Pandas - 查找一些特定行并将过滤后的数据框输出到新的 CSV 文件中
- typescript - TypeScript:可选 CLASS 属性的问号实际上有什么不同吗?
- python - 获取直方图日期时间列表python
- react-native - React Native:如何实现具有多个对象的动态键
- javascript - 在 view.blade Laravel 上显示谷歌地图
- intellij-idea - jinja 文件 (.jinja, .j2) 的 IntelliJ 语法高亮显示
- angular - Angular中递归对象的循环依赖(通过调用静态方法链接)
- c# - Microsoft 认知服务 - 限制 Luis Api 中的意图
- mysql - 如何将两个查询结果合并到一个表中