【发布时间】:2021-08-30 17:22:20
【问题描述】:
我创建了一个RecyclerView,它应该显示在我的片段中。
recyclerView 填充了我用房间创建的数据库中的数据,我还提供了一些虚拟数据,因此它从一开始就不是空的。
但是当我打开应用程序时,片段只是空的。我还尝试添加一个 textview 只是为了查看我的片段是否膨胀但回收器是空的,但即使是 TextView 也没有显示。
这是片段:
@AndroidEntryPoint
class HistoryFragment : Fragment(R.layout.fragment_history) {
private val viewModel: PurchaseViewmodel by viewModels()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val binding = FragmentHistoryBinding.bind(view)
val exampleAdapter = ExampleAdapter()
binding.apply{
recyclerView.apply{
layoutManager = LinearLayoutManager(requireContext())
adapter = exampleAdapter
setHasFixedSize(true)
}
}
viewModel.receipts.observe(viewLifecycleOwner){
exampleAdapter.submitList(it)
}
}
}
还有适配器:
class ExampleAdapter : ListAdapter<Receipts,ExampleAdapter.ReceiptsViewHolder>(DiffCallback()) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ReceiptsViewHolder {
val binding = ReceiptsBinding.inflate(LayoutInflater.from(parent.context),parent,false)
return ReceiptsViewHolder(binding)
}
override fun onBindViewHolder(holder: ReceiptsViewHolder, position: Int) {
val currentItem = getItem(position)
holder.bind(currentItem)
}
class ReceiptsViewHolder(private val binding: ReceiptsBinding) : RecyclerView.ViewHolder(binding.root){
fun bind (receipts: Receipts) {
binding.apply {
storeHistory.text = receipts.store
amountHistory.text = receipts.total
dateHistory.text = receipts.date
}
}
}
class DiffCallback : DiffUtil.ItemCallback<Receipts>() {
override fun areItemsTheSame(oldItem: Receipts, newItem: Receipts) =
oldItem.id == newItem.id
override fun areContentsTheSame(oldItem: Receipts, newItem: Receipts) =
oldItem == newItem
}
}
【问题讨论】:
-
你有
override getItemCount()吗? -
不,我没有那个实现。我该怎么做?
-
抱歉,虽然您从
RecyclerView.Adapter扩展而来,但ListAdapter不需要它 -
啊该死的好吧。
-
我有机会查看提供的示例,问题似乎出在布局中。请看看我的回答
标签: android kotlin android-fragments android-recyclerview listadapter