我试图在TabLayout中的一个片段上显示RecyclerView,而该TabLayout也是一个片段。但是,即使没有错误,RecyclerView仍然拒绝显示。根据我收集的信息,TabLayout的一个片段应该有可能具有RecyclerView。但是,我不知道问题是否在于我在一个片段上构建了我的TabLayout,导致recyclerview没有显示。我想我一定是做错了什么,我需要一些帮助。下面是我的代码:
表格布局片段
var viewPager = root.findViewById(R.id.viewPager) as ViewPager
var tablayout = root.findViewById(R.id.tabLayout) as TabLayout
val fragmentAdapter = FragmentAdapter(requireActivity().supportFragmentManager)
fragmentAdapter.addFragment(OpenLoansFragment(), "Active")
fragmentAdapter.addFragment(ClosedLoansFragment(), "Closed")
viewPager.adapter = fragmentAdapter
tablayout.setupWithViewPager(viewPager)
回收视图片段
private lateinit var swipeRefreshLayout:SwipeRefreshLayout
private lateinit var loanRecRcv:RecyclerView
private var list: ArrayList<LoanRecordModel> = ArrayList()
private var loanRecRcvAdapter = LoanRecRcvAdapter(list, this)
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = FragmentOpenLoansBinding.inflate(inflater, container, false)
val root: View = binding.root
return root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
list = arrayListOf(
LoanRecordModel("", "Petty Cash Loan", "12/05/2022", "Open"),
LoanRecordModel("", "Petty Cash Loan", "12/05/2022", "Open"),
LoanRecordModel("", "Petty Cash Loan", "12/05/2022", "Open"),
LoanRecordModel("", "Petty Cash Loan", "12/05/2022", "Open"),
LoanRecordModel("", "Petty Cash Loan", "12/05/2022", "Open")
)
initView()
loanRecRcv.apply{
layoutManager = LinearLayoutManager(activity)
adapter = loanRecRcvAdapter
}
}
private fun initView() {
swipeRefreshLayout = requireActivity().findViewById(R.id.swipeRefresh)
loanRecRcv = requireActivity().findViewById(R.id.loanRecRcv)
}
1条答案
按热度按时间eblbsuwk1#
您在
RecyclerView
中显示了一个空列表。首先,您在构建时创建了一个空适配器:然后将该适配器应用到您的RV上:
您正在
onViewCreated
中创建项目列表但这是在 * 替换 * 存储在
list
变量中的列表。之前(在构造时)已经使用原始列表创建了Adapter
,所以它仍然在内部使用那个空列表。它没有引用list
变量。两个基本选项-将
list
设为MutableList
并更新其内容而不是替换它:这种方法更好,因为适配器的数据集是内部保存的,而不是在片段中。您有一个简单的
setData
函数,它接受新数据,并根据需要处理适配器的更新。调用者不需要知道这些信息。它只传递数据。你也可以从Adapter
的构造函数中移除你的List
参数--你并没有将它初始化为空列表--这是内部list
属性的默认值顺便说一句,要初始化相同内容的列表,您可以
如果你愿意话