我正在嘗試RecyclerViews根據孩子在我的一個 RTDB 參考中具有的屬性過濾三個活動。在我的 上ServiceActivity,我有這三個RecyclerViews,我需要幫助來了解我需要做什么來執行過濾器。我是否需要ArrayList為每個category屬性名稱創建一個空名稱,然后對每個屬性名稱執行過濾功能?或者我將如何執行此操作?謝謝!
我有的

一個 RTDB 參考子

服務活動.kt
lateinit var autoJobServicesAdapter: JobServicesAdapter
lateinit var homeJobServicesAdapter: JobServicesAdapter
lateinit var personalJobServicesAdapter: JobServicesAdapter
val jobServices = ArrayList<JobService>()
val jobServicesDatabaseRef = FirebaseDatabase.getInstance().reference.child(REF_JOB_SERVICES)
val autoServices = ArrayList<JobService>()
val homeServices = ArrayList<JobService>()
val personalServices = ArrayList<JobService>()
private fun setupAutoRecyclerView() {
autoJobServicesAdapter = JobServicesAdapter(jobServices)
val autoRecyclerView = findViewById<RecyclerView>(R.id.autoServicesRecyclerView)
autoRecyclerView.apply {
layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)
adapter = autoJobServicesAdapter
setHasFixedSize(true)
}
jobServicesDatabaseRef.orderByChild("jobName").addValueEventListener(object: ValueEventListener {
@SuppressLint("NotifyDataSetChanged")
override fun onDataChange(snapshot: DataSnapshot) {
jobServices.clear()
for (snap in snapshot.children) {
val jobService = JobService(snap.child("category").getValue(String::class.java)!! ,
snap.child("jobName").getValue(String::class.java)!! , snap.child("jobImageUrl").getValue(String::class.java)!! ,
snap.child("jobServiceImageUrl").getValue(String::class.java)!!)
jobServices.add(jobService)
}
autoJobServicesAdapter.notifyDataSetChanged()
}
override fun onCancelled(error: DatabaseError) {
Log.d("ServiceActivity", "LoadPost:onCancelled", error.toException())
}
})
}
private fun setupHomeRecyclerView() {
homeJobServicesAdapter = JobServicesAdapter(jobServices)
val homeRecyclerView = findViewById<RecyclerView>(R.id.homeServicesRecyclerView)
homeRecyclerView.apply {
layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)
adapter = homeJobServicesAdapter
setHasFixedSize(true)
}
jobServicesDatabaseRef.orderByChild("jobName").addValueEventListener(object: ValueEventListener {
@SuppressLint("NotifyDataSetChanged")
override fun onDataChange(snapshot: DataSnapshot) {
jobServices.clear()
for (snap in snapshot.children) {
val jobService = JobService(snap.child("category").getValue(String::class.java)!! ,
snap.child("jobName").getValue(String::class.java)!! , snap.child("jobImageUrl").getValue(String::class.java)!! ,
snap.child("jobServiceImageUrl").getValue(String::class.java)!!)
jobServices.add(jobService)
}
homeJobServicesAdapter.notifyDataSetChanged()
}
override fun onCancelled(error: DatabaseError) {
Log.d("ServiceActivity", "LoadPost:onCancelled", error.toException())
}
})
}
private fun setupPersonalRecyclerView() {
personalJobServicesAdapter = JobServicesAdapter(jobServices)
val personalRecyclerView = findViewById<RecyclerView>(R.id.personalServicesRecyclerView)
personalRecyclerView.apply {
layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)
adapter = personalJobServicesAdapter
setHasFixedSize(true)
}
jobServicesDatabaseRef.orderByChild("jobName").addValueEventListener(object: ValueEventListener {
@SuppressLint("NotifyDataSetChanged")
override fun onDataChange(snapshot: DataSnapshot) {
jobServices.clear()
for (snap in snapshot.children) {
val jobService = JobService(snap.child("category").getValue(String::class.java)!! ,
snap.child("jobName").getValue(String::class.java)!! , snap.child("jobImageUrl").getValue(String::class.java)!! ,
snap.child("jobServiceImageUrl").getValue(String::class.java)!!)
jobServices.add(jobService)
}
personalJobServicesAdapter.notifyDataSetChanged()
}
override fun onCancelled(error: DatabaseError) {
Log.d("ServiceActivity", "LoadPost:onCancelled", error.toException())
}
})
}
uj5u.com熱心網友回復:
您從 Firebase 加載完全相同的資料 3 次。雖然客戶端足夠聰明,可以為您洗掉這些查詢的重復資料,但最好只處理一次相同的資料。
如何一次創建三個視圖、串列和配接器,然后用這個片段加載每個視圖的資料?像這樣的東西:
private fun loadDataForRecyclerViews() {
jobServicesDatabaseRef.orderByChild("jobName").addValueEventListener(object: ValueEventListener {
@SuppressLint("NotifyDataSetChanged")
override fun onDataChange(snapshot: DataSnapshot) {
jobServices.clear()
for (snap in snapshot.children) {
// ?? Load the category and the job
val category = category
val jobService = (category ,
snap.child("jobName").getValue(String::class.java)!! , snap.child("jobImageUrl").getValue(String::class.java)!! ,
snap.child("jobServiceImageUrl").getValue(String::class.java)!!)
// ?? Put the job in the correct list based on its category
if (category == "auto") {
autoJobServices.add(jobService)
}
else if (category == "home") {
homeJobServices.add(jobService)
}
else if (category == "personal") {
personalJobServices.add(jobService)
}
}
// ?? Refresh all views
autoJobServicesAdapter.notifyDataSetChanged()
homeJobServicesAdapter.notifyDataSetChanged()
personalJobServicesAdapter.notifyDataSetChanged()
}
override fun onCancelled(error: DatabaseError) {
Log.d("ServiceActivity", "LoadJobs", error.toException())
}
})
}
注意:我沒有編譯這段代碼,只是提供它作為起點。如果您遇到編譯器錯誤,請在發表評論之前嘗試自行修復它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/411106.html
標籤:
