Я хочу перечислить все объекты ServiceOrder в RecyclerView. Я создал SOListingFragment, связанный с адаптером (SOListingAdapter). Класс адаптера управляет данными и привязывает их к RecyclerView.
При запуске приложения мне удалось добавить данные в Firebase, но в макете списка не отображались никакие данные из База данных Firestore
Вот то, что я ожидал: ожидаемый макет.
Это результат во время выполнения: макет результата здесь
Может кто-нибудь помочь мне определить, в чем проблема? Я застрял на этом уже несколько недель.
Код: Выделить всё
data class ServiceOrder(
val id: String="",
val SO_numb: String="",
val SO_title: String="",
val SO_type: String="",
val SO_description: String="",
@ServerTimestamp
val date: Date= Date(),)
@AndroidEntryPoint class SOListingFragment : Fragment() {
val TAG: String = "SOListingFragment"
lateinit var binding: FragmentSOListingBinding
val viewModel: ServiceOrderViewModel by viewModels()
val adapter by lazy {
SOListingAdapter(
onItemClicked = { pos, item -> } ,
onEditClicked = { pos, item -> } ,
onDeleteClicked = {pos, item ->},
)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
// Inflate the layout for this fragment
//return inflater.inflate(R.layout.fragment_s_o_listing, container, false)
binding = FragmentSOListingBinding.inflate(layoutInflater)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.recyclerView.adapter = adapter
binding.button.setOnClickListener{
findNavController().navigate(R.id.action_SOListingFragment_to_SODetailFragment)
}
viewModel.getServiceOrders()
viewModel.serviceOrder.observe(viewLifecycleOwner){ state ->
when(state){
is UiState.Loading -> {
binding.progressBar.show()
}
is UiState.Failure -> {
binding.progressBar.hide()
toast(state.error)
}
is UiState.Success->{
binding.progressBar.hide()
adapter.updateList(state.data.toMutableList())
}
}
}
}
class SOListingAdapter (
val onItemClicked:
(Int, ServiceOrder)-> Unit,
val onEditClicked: (Int, ServiceOrder)-> Unit,
val onDeleteClicked: (Int, ServiceOrder)-> Unit,
): RecyclerView.Adapter(){private var list: MutableList = arrayListOf()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val itemView = ItemSoLayoutBinding.inflate(LayoutInflater.from(parent.context),parent,false)
return MyViewHolder(itemView)
}
fun updateList(list: MutableList){
this.list = list
notifyDataSetChanged()
}
override fun getItemCount(): Int {
return list.size
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
val item = list[position]
Log.d("SOListingAdapter", "Binding item at position $position: $item")
holder.bind(item)
}
inner class MyViewHolder(val binding: ItemSoLayoutBinding): RecyclerView.ViewHolder(binding.root) { fun bind(item: ServiceOrder){ binding.SoNumber.setText(item.SO_numb)
binding.SoType.setText(item.SO_type)
binding.SoDescription.setText(item.SO_description)
binding.SoLayout.setOnClickListener{ onEditClicked.invoke(adapterPosition,item)}
binding.itemLayout.setOnClickListener{onItemClicked.invoke(adapterPosition,item)}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/786 ... iewbinding
Мобильная версия