首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RecyclerView inside RecyclerView in kotlin

RecyclerView inside RecyclerView in kotlin
EN

Stack Overflow用户
提问于 2021-05-02 19:17:50
回答 1查看 66关注 0票数 0
代码语言:javascript
复制
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中,但我仍然无法纠正这个问题。

EN

回答 1

Stack Overflow用户

发布于 2021-05-02 19:21:24

RecyclerView中的RecyclerView不是理想的解决方案。相反,您需要在RecyclerView中使用nestedView。我为此找到了一个很好的example

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67355736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档