package com.example.expensemanager.ui.monthlyCards
import android.app.Activity
import android.content.Context
import android.content.SharedPreferences
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.fragment.app.FragmentActivity
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.Observer
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import com.example.expensemanager.R
import com.example.expensemanager.ui.TransactionAdapter
import kotlinx.android.extensions.LayoutContainer
import kotlinx.android.synthetic.main.fragment_monthly_cards.*
import kotlinx.android.synthetic.main.monthly_card_item.*
class MonthCardsAdapter(private val listener: (Long) -> Unit ,val sharedPreferences: SharedPreferences , val activity:FragmentActivity?, val viewModel: MonthlyCardsViewModel,val lifecycleOwner: LifecycleOwner):
ListAdapter<Long, MonthCardsAdapter.ViewHolder>(
DiffCallback1()
){
override fun onCreateViewHolder(parent: ViewGroup,
viewType: Int): ViewHolder {
val itemLayout = LayoutInflater.from(parent.context)
.inflate(R.layout.monthly_card_item, parent, false)
return ViewHolder(itemLayout)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bind(getItem(position))
}
inner class ViewHolder (override val containerView: View) : RecyclerView.ViewHolder(containerView),
LayoutContainer {
init{
itemView.setOnClickListener{
listener.invoke(getItem(adapterPosition))
}
}
fun bind(monthYear: Long){
month_name.text = monthYear.toString()
year_name.text = "2001"
val monthlyBudget = sharedPreferences.getFloat("monthlyBudget",0F)
monthly_budget.text = monthlyBudget.toString()
child_recycler_view.apply {
layoutManager = LinearLayoutManager(activity)
adapter = TransactionAdapter({})
}
viewModel.transactionMonth.observe(lifecycleOwner, Observer {
(child_recycler_view.adapter as TransactionAdapter).submitList(it)
})
}
}
}
class DiffCallback1 : DiffUtil.ItemCallback<Long>() {
override fun areItemsTheSame(oldItem: Long, newItem: Long): Boolean {
return oldItem == newItem
}
override fun areContentsTheSame(oldItem: Long, newItem: Long): Boolean {
return oldItem == newItem
}
}这是我的父回收器视图的适配器,其中我将lifeCycleOwner作为构造函数中的参数,然后在bindViewHolder中设置子回收器视图的适配器。问题是没有显示子回收器视图。根据我的说法,错误在lifeCycleOwner中,但我仍然无法纠正这个问题。
发布于 2021-05-02 19:21:24
RecyclerView中的RecyclerView不是理想的解决方案。相反,您需要在RecyclerView中使用nestedView。我为此找到了一个很好的example。
https://stackoverflow.com/questions/67355736
复制相似问题