【发布时间】:2020-07-05 12:01:57
【问题描述】:
这是我创建的适配器。
groupsAdapter = GroupsAdapter(groupsVM)
groupsRecyclerView.apply {
// use this setting to improve performance if you know that changes
// in content do not change the layout size of the RecyclerView
setHasFixedSize(false)
// specify an viewAdapter
adapter = groupsAdapter
// use a linear layout manager
layoutManager = LinearLayoutManager(context)
}
然后我设置了viewmodel的监听器
groupsVM.groupNames.observe(viewLifecycleOwner , Observer {
groupsAdapter.setData(it)
})
以上代码在视图中。
那么,这就是我的适配器类
class GroupsAdapter()
: RecyclerView.Adapter<GroupsAdapter.MyViewHolder>(){
private var dataList = emptyList<Pair<String, String>>()
fun setData(groupNameList: List<Pair<String, String>>){
dataList = groupNameList
notifyDataSetChanged()
}
class MyViewHolder(private val view: View) :
RecyclerView.ViewHolder(view){
val groupView = itemView.findViewById<TextView>(R.id.group_view) as View
val groupNameTextView = itemView.findViewById<TextView>(R.id.group_name) as TextView
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int):
MyViewHolder {
// create a new view
val view = LayoutInflater.from(parent.context).
inflate(R.layout.group, parent, false) as View
return MyViewHolder(view)
}
override fun getItemCount(): Int {
return dataList.size
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
val group = dataList[position]
if (group != null) {
holder.groupNameTextView.text = group.second
}
}
}
当调用 getItemCount 并返回一个正值时,我也希望 onCreateViewHolder 也被调用。 但永远不会调用 onCreateViewHolder。 你能帮助我吗? 非常感谢!
【问题讨论】:
-
您启用了
setHasFixedSize(true)。您是否检查了对getItemCount()的第一次调用没有返回 0? -
是的,第一次返回0。我将 fixedSize 设置为 false,但仍然没有任何反应...
-
您应该避免在适配器构造函数中传递 ViewModel,而是设置默认数据或将空列表作为初始数据传递给适配器构造函数。
-
我已经更改了代码,但仍然没有
标签: android kotlin android-recyclerview adapter