kotlin 在片段中的 RecyclerView 中显示来自 Firebase 数据库的数据
Posted
技术标签:
【中文标题】kotlin 在片段中的 RecyclerView 中显示来自 Firebase 数据库的数据【英文标题】:kotlin displaying data from Firebase database in RecyclerView in fragment 【发布时间】:2020-02-01 18:52:44 【问题描述】:这是我第一次构建应用程序。我想在 recyclerview 的 firebase realtimedatabase 中显示我的数据。但是 'E/RecyclerView: 没有附加适配器;跳过布局”在运行图表上。
我会按顺序给你看我的代码。
首先,这是我在 kotlin 中的 Data 类
data class BalInputDTO(
var Id : String? = null,
var Itype: String? = null,
var Icategory: String? = null,
var ldate : String? = null,
var balance: String? = null,
var commnet: String? = null)
然后这是我的adapter.kt
class BalAdapter(val context: Context, val BalList: ArrayList<BalInputDTO>) :
RecyclerView.Adapter<BalAdapter.Holder>()
override fun onBindViewHolder(holder: Holder, position: Int)
holder?.bind(BalList[position], context)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder
val view = LayoutInflater.from(context).inflate(R.layout.household_detail, parent, false)
return Holder(view)
override fun getItemCount(): Int
return BalList.size
inner class Holder(view: View?) : RecyclerView.ViewHolder(view!!)
val recordCategory = view?.findViewById<TextView>(R.id.record_category)
val recordNote = view?.findViewById<TextView>(R.id.record_note)
val recordAmount = view?.findViewById<TextView>(R.id.record_amount)
val recordDate = view?.findViewById<TextView>(R.id.record_date)
val recordDeleteImageView = view?.findViewById<ImageButton>(R.id.record_delete_image_button)
fun bind(bal: BalInputDTO, context: Context)
recordCategory?.text = bal.Icategory
recordNote?.text = bal.commnet
recordAmount?.text = bal.balance
recordDate?.text = bal.ldate
// recordDeleteImageView.imageb
和最后一个代码。这是我的 Fragment.kt(仅 onCreatView 部分)
var fragmentView : View? = null
var firedatabase : FirebaseDatabase? = null
var BalList : ArrayList<BalInputDTO> ? = null
var ref : DatabaseReference? = null
var mRecyclerView : RecyclerView? =null
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View?
fragmentView= LayoutInflater.from(activity).inflate(R.layout.fragment_household, container, false)
firedatabase = FirebaseDatabase.getInstance()
mRecyclerView = fragmentView?.findViewById(R.id.household_recyclerview)
mRecyclerView?.setHasFixedSize(true)
mRecyclerView?.layoutManager = LinearLayoutManager(context)
BalList = arrayListOf<BalInputDTO>()
ref = FirebaseDatabase.getInstance().getReference("BalInput")
ref?.addValueEventListener(object : ValueEventListener
override fun onCancelled(p0: DatabaseError)
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
override fun onDataChange(p0: DataSnapshot)
if(p0!!.exists())
for (h in p0.children)
val bal = h.getValue(BalInputDTO::class.java)
BalList?.add(bal!!)
val adapter = BalAdapter(context!!,BalList = ArrayList<BalInputDTO>())
mRecyclerView?.setAdapter(adapter)
)
return fragmentView
这是我的数据库enter image description here
如果我错过了什么或做错了什么,请告诉我。
【问题讨论】:
【参考方案1】:您似乎将错误的列表传递给您的适配器。试试这个
val adapter = BalAdapter(context!!,BalList)
而不是
val adapter = BalAdapter(context!!,BalList = ArrayList<BalInputDTO>())
【讨论】:
【参考方案2】:我想说这里真正的问题是这一行
val adapter = BalAdapter(context!!,BalList = ArrayList<BalInputDTO>())
尝试将其更改为:
val adapter = BalAdapter(context!!,BalList)
因为这是您从 FB 添加所有元素的地方。
【讨论】:
以上是关于kotlin 在片段中的 RecyclerView 中显示来自 Firebase 数据库的数据的主要内容,如果未能解决你的问题,请参考以下文章
片段内的 RecyclerView 的 Kotlin OnItemClickListener
Fragments RecyclerView Databinding Kotlin - 未解析的引用变量名称
Kotlin Android Fragment recyclerView 和上下文问题