У меня есть RecycledView во фрагменте, который отображает BindedDevices. Когда у меня есть весь код в классе Fragment, он работает. Я хочу сделать рефакторинг и отделить адаптер от другого класса, но когда я это сделал, адаптер перестал работать. У кого-нибудь есть решение?
Код рабочего фрагмента:
package com.example.lightmeup.Fragments
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.lightmeup.Adapter.BindedDeviceAdapter
import com.example.lightmeup.ViewHolder.BindedDeviceViewHolder
import com.example.lightmeup.Model.BindedDeviceItem
import com.example.lightmeup.R
import com.firebase.ui.database.FirebaseRecyclerAdapter
import com.firebase.ui.database.FirebaseRecyclerOptions
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.database.DatabaseReference
import com.google.firebase.database.FirebaseDatabase
class AllDevicesFragment : Fragment() {
private lateinit var mDatabase: DatabaseReference
private lateinit var rootView: View
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
rootView = inflater.inflate(R.layout.fragment_alldevices, container, false)
return rootView
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
if (FirebaseAuth.getInstance().currentUser?.uid != null) {
var uid = FirebaseAuth.getInstance().currentUser!!.uid
mDatabase = FirebaseDatabase.getInstance().reference.child(uid)
mDatabase.keepSynced(true)
}
var bindedDevicesRecycledView = rootView.findViewById(R.id.bindedDevicesRecycledView) as RecyclerView
bindedDevicesRecycledView.layoutManager = LinearLayoutManager(activity)
bindedDevicesRecycledView.setHasFixedSize(true)
var options = FirebaseRecyclerOptions.Builder<BindedDeviceItem>()
.setQuery(mDatabase,BindedDeviceItem::class.java).build()
var adapter = object : FirebaseRecyclerAdapter<BindedDeviceItem, BindedDeviceViewHolder>(options) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BindedDeviceViewHolder {
val layoutInflater = LayoutInflater.from(parent.context)
val cellForRow = layoutInflater.inflate(R.layout.binded_device_item, parent ,false)
return BindedDeviceViewHolder(
cellForRow
)
}
override fun onBindViewHolder(holder: BindedDeviceViewHolder, position: Int, bindedDevice: BindedDeviceItem) {
holder.bind(bindedDevice)
}
}
adapter.startListening()
bindedDevicesRecycledView.adapter = adapter
}
override fun onStart() {
super.onStart()
}
}
Адаптер после рефакторинга:
package com.example.lightmeup.Adapter
import android.view.LayoutInflater
import android.view.ViewGroup
import com.example.lightmeup.Model.BindedDeviceItem
import com.example.lightmeup.R
import com.example.lightmeup.ViewHolder.BindedDeviceViewHolder
import com.firebase.ui.database.FirebaseRecyclerAdapter
import com.firebase.ui.database.FirebaseRecyclerOptions
open class BindedDeviceAdapter(var bindedDevices: FirebaseRecyclerOptions<BindedDeviceItem>): FirebaseRecyclerAdapter<BindedDeviceItem, BindedDeviceViewHolder>(bindedDevices) {
var devices: MutableList<BindedDeviceItem> = arrayListOf()
override fun getItemCount(): Int {
return devices.size
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BindedDeviceViewHolder {
val layoutInflater = LayoutInflater.from(parent.context)
val cellForRow = layoutInflater.inflate(R.layout.binded_device_item, parent ,false)
return BindedDeviceViewHolder(cellForRow)
}
override fun onBindViewHolder(holder: BindedDeviceViewHolder, position: Int, bindedDeviceItem: BindedDeviceItem) {
holder.bind(bindedDeviceItem)
}
}
Код фрагмента после рефактор
package com.example.lightmeup.Fragments
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.lightmeup.Adapter.BindedDeviceAdapter
import com.example.lightmeup.ViewHolder.BindedDeviceViewHolder
import com.example.lightmeup.Model.BindedDeviceItem
import com.example.lightmeup.R
import com.firebase.ui.database.FirebaseRecyclerAdapter
import com.firebase.ui.database.FirebaseRecyclerOptions
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.database.DatabaseReference
import com.google.firebase.database.FirebaseDatabase
class AllDevicesFragment : Fragment() {
private lateinit var adapter: BindedDeviceAdapter
private lateinit var mDatabase: DatabaseReference
private lateinit var rootView: View
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
rootView = inflater.inflate(R.layout.fragment_alldevices, container, false)
return rootView
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
if (FirebaseAuth.getInstance().currentUser?.uid != null) {
var uid = FirebaseAuth.getInstance().currentUser!!.uid
mDatabase = FirebaseDatabase.getInstance().reference.child(uid)
mDatabase.keepSynced(true)
}
var bindedDevicesRecycledView = rootView.findViewById(R.id.bindedDevicesRecycledView) as RecyclerView
bindedDevicesRecycledView.layoutManager = LinearLayoutManager(activity)
bindedDevicesRecycledView.setHasFixedSize(true)
var options = FirebaseRecyclerOptions.Builder<BindedDeviceItem>()
.setQuery(mDatabase,BindedDeviceItem::class.java).build()
adapter = BindedDeviceAdapter(options)
adapter.startListening()
bindedDevicesRecycledView.adapter = adapter
}
override fun onStart() {
super.onStart()
}
}