- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
[在此处输入图片描述] [1]
尽管代码的格式和实现完全正确,但是应用程序中似乎存在一个错误,该错误不允许应用程序检索和显示数据。用于构建RecyclerView
的后端的完整组件:
显示RecyclerView的片段:
package com.reazon.foodrunner.fragment
import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.firebase.ui.database.FirebaseRecyclerAdapter
import com.google.firebase.database.*
import com.reazon.foodrunner.R
import com.reazon.foodrunner.adapter.HomeRecyclerAdapter
import com.reazon.foodrunner.model.Restaurants
class HomeFragment : Fragment() {
private var mDatabaseReference: DatabaseReference? = null
private var recyclerAdapter: HomeRecyclerAdapter? = null
private var recyclerHome: RecyclerView? = null
internal var restaurantsList: MutableList<Restaurants> = ArrayList()
private var layoutManager: RecyclerView.LayoutManager? = null
private lateinit var adapter: FirebaseRecyclerAdapter<Restaurants,HomeRecyclerAdapter.HomeRecyclerViewHolder>
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view = inflater.inflate(R.layout.fragment_home, container, false)
mDatabaseReference = FirebaseDatabase.getInstance().getReference("Restaurants")
recyclerHome = view.findViewById(R.id.recyclerHomeAll)
layoutManager = LinearLayoutManager(activity)
recyclerHome!!.layoutManager = layoutManager
//retrieve data from firebase
retrieveAllRestaurants()
return view
}
private fun retrieveAllRestaurants() {
restaurantsList.clear()
val restaurantReference = FirebaseDatabase.getInstance().reference.child("Restaurants")
restaurantReference.addValueEventListener(object : ValueEventListener {
override fun onCancelled(error: DatabaseError) {
Log.d("ERROR ", "" + error.message)
}
override fun onDataChange(p0: DataSnapshot) {
for (snapshot in p0.children) {
val restaurant = snapshot.getValue(Restaurants::class.java)
restaurant!!.getRestaurant()
restaurant.getRestaurantRating()
restaurant.getCostForOne()
restaurant.getRestaurantName()
restaurantsList.add(restaurant)
}
recyclerAdapter = HomeRecyclerAdapter(context!! , restaurantsList)
recyclerHome?.adapter = recyclerAdapter
}
})
}
}
使用的模型类:
package com.reazon.foodrunner.model
class Restaurants {
private var id: String? = null
private var name: String? = null
private var rating: String? = null
private var cost_for_one: String? = null
private var imageUrl: String? = null
constructor()
constructor(
id: String,
name: String,
rating: String,
cost_for_one: String,
imageUrl: String
) {
this.id = id
this.name = name
this.rating = rating
this.cost_for_one = cost_for_one
this.imageUrl = imageUrl
}
fun getRestaurant(): String? {
return imageUrl
}
fun setRestaurant(imageUrl: String){
this.imageUrl = imageUrl
}
fun getRestaurantId(): String? {
return id
}
fun setRestaurantId(id: String){
this.id = id
}
fun getRestaurantName(): String? {
return name
}
fun setRestaurantName(name: String){
this.name = name
}
fun getRestaurantRating(): String? {
return rating
}
fun setRestaurantRating(rating: String){
this.rating = rating
}
fun getCostForOne(): String? {
return cost_for_one
}
fun setCostForOne(cost_for_one: String) {
this.cost_for_one = cost_for_one
}
}
使用的适配器类:
package com.reazon.foodrunner.adapter
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageButton
import android.widget.ImageView
import android.widget.TextView
import android.widget.Toast
import androidx.recyclerview.widget.RecyclerView
import com.reazon.foodrunner.R
import com.reazon.foodrunner.model.Restaurants
import com.squareup.picasso.Picasso
class HomeRecyclerAdapter(
var context: Context,
var restaurantsList: List<Restaurants>
) : RecyclerView.Adapter<HomeRecyclerAdapter.HomeRecyclerViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HomeRecyclerViewHolder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.recycler_home_single_row, parent, false)
return HomeRecyclerViewHolder(view)
}
override fun getItemCount(): Int {
return restaurantsList.size
}
override fun onBindViewHolder(holder: HomeRecyclerViewHolder, position: Int) {
val restaurant = restaurantsList[position]
holder.costForOne.text = restaurant.getCostForOne().toString()
holder.rating.text = restaurant.getRestaurantRating().toString()
holder.textView.text = restaurant.getRestaurantName()
Picasso.get().load(restaurant.getRestaurant()).placeholder(R.drawable.food_runner_icon).into(holder.imageView).toString()
holder.btnFavourite.setOnClickListener {
Toast.makeText(context ,"Favourite Button Clicked",Toast.LENGTH_LONG).show()
}
}
class HomeRecyclerViewHolder(view: View) : RecyclerView.ViewHolder(view) {
var imageView: ImageView = view.findViewById(R.id.imgRestaurantImage)
var costForOne: TextView = view.findViewById(R.id.txtCostForOne)
var textView: TextView = view.findViewById(R.id.txtRestaurantName)
var btnFavourite: ImageButton = view.findViewById(R.id.btnFavourite)
var rating: TextView = view.findViewById(R.id.txtRating)
}
}
Firebase数据库结构:
最佳答案
Although the code is formatted and implemented completely fine, there seems to a bug in the application that doesn't allow the app to retrieve and display the data.
Restaurants
类,其中所有 getter 的名称都不正确。如果您的类(class)中有一个名为
id
的属性,则对应的getter应该是
getId()
和
而不是
getRestaurantId()
。另一方面,setter应该是
setId()
和
而不是
setRestaurantId()
。有两种方法可以解决此问题。第一个是根据上面的示例更改所有 getter / setter 的所有名称。
data class
:
data class Restaurant(
var id: String? = null,
var name: String? = null,
var rating: String? = null,
var cost_for_one: String? = null,
var imageUrl: String? = null
)
另请注意,该类的名称是
Restaurant
和
而不是
Restaurants
,这是因为可以将此类视为单个餐厅的蓝图,而不是更多餐厅的蓝图。
关于firebase - RecyclerView不会从Firebase加载任何数据,并且所有行均显示为null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63239393/
我在另一个 RecyclerView(parentRecyclerView) 中实现了 RecyclerView(childRecyclerView),图片说明了所有的实现: 我想编写一个 espre
我正在构建一个应用程序,它使用ViewPager2在页面之间水平滚动,每个页面都有一个垂直滚动的内容RecyclerView,其中每个列表的第一个位置都有一行水平滚动小部件,例如附加到寻呼机指示器类型
我正在尝试实现一个水平的 recyclerview 并且 recyclerview 的每个项目都将是一个具有网格布局的垂直 recyclerview。我面临的问题是,当我尝试垂直滚动子 recycle
我使用显示条目列表的 RecyclerView。每个条目都托管另一个 RecyclerView,它是一个图像列表。 我现在想让这个嵌套的 RecyclerView 可点击,而不是它的项目,而是整个 V
我正在尝试将手机中的图像加载到我的回收 View 中。 到目前为止,我已经创建了一个 recyclerview.adapter 和一个 gridlayoutmanager,并将它们附加到我的 recy
我需要一个可扩展 View ,其中父/可扩展标题将具有文本和下拉箭头。每个此类标题的子项应该是在网格结构中具有多个项目的 View 。 (有点像带有 GridLayoutManager 的回收器 Vi
我正在使用显示不同类别列表的 RecyclerView。每行项目还包含 RecyclerView 以显示类别项目列表。父级 RecyclerView 由垂直 LinearLayoutManager 填
我正在更新一个旧的 Android 项目,现在我从 RecyclerView 中反复收到这条日志语句: W/RecyclerView:RecyclerView 不支持滚动到绝对位置。改为使用 scro
在我的 Adapter 中,我调用 LayoutManager.ChildAt(position) 来获取 itemview,但是我得到的 View 不是匹配的 itemview,当我调用 notif
我正在从 ListView 迁移到 RecyclerView,但是在 SQLite 中输入一些数据后,我的列表没有使用 notifyDataSetChanged() 更新;所以我总是要调用setAda
我正在用 Google Now Cards 的风格创建一组 5 张卡片。我首先关注的是总体布局。 我正在使用 CardView 和 RecyclerView ,我想要实现的是这样的: 这是我的 Car
在我的应用程序中,我有一个 RecyclerView,其中包含一个简单的项目 View ,每行包含一个 TextView 和一个 Spinner。 用户从操作栏中单击“保存”后,我需要遍历所有项目并获
我正在尝试检查 RecyclerView 中是否可以看到某些特定项目;但我无法实现。请帮助我确定我的项目是否在 RecyclerView 中完全可见。 mrecylerView.addOnScroll
我有一个提要片段,它的主要元素是帖子的 RecyclerView。 我正在使用 Lisa Wray 的 Groupie 库管理回收站 https://github.com/lisawray/group
我有这两个类似的行为回收器 View 适配器,它们之间的唯一区别是 onclick 方法和传递给它们的对象。所以,我正在考虑将类 B 设计为从回收器 View 适配器继承,这样我就可以更改构造函数来执
这很奇怪。我对这个问题感到沮丧。我将数据保存在 ArrayList 中。当我将数据放在 RecyclerView 上时。数据未显示在列表中。这是我的代码 listOrder.forEach { ord
编辑我通过使用 CoordinatorLayout 和 AppBarLayout 作为 header 和 TabLayout 的包装解决了这个问题。本来应该很明显,但是哦,好吧。 原始问题:我有一个设
我有一个回收 View 。我想从其适配器类更新回收器 View 。我尝试了 notiftDataSetChanged( ) 但它只适用于主类。下面是 recyclerview 适配器类的代码。 pac
我正在使用具有不同 viewholders 的 recyclerview(具有垂直 LinearLayout),其中一个有另一个 RecyclerView(带有水平 LL)。在第二个 recycler
我想创建一个与 Google Play Store 或 Netflix App 类似的布局,其中在单个 RecyclerView 中基本上有多个水平 RecyclerView。如果这不是他们做事的方式
我是一名优秀的程序员,十分优秀!