java - 两个 ViewHolders 一个 Adapter
问题描述
我有两个不同的片段RecyclerViews
,我为片段制作了两个ViewHolders
片段:
class RecyclerOneViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
val title = itemView.list_tv
val image = itemView.list_img
}
class RecyclerTwoViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
val title = itemView.tv_card
val image = itemView.iv_card
val date = itemView.tv_card_date
}
我有我的适配器,但只有第一个ViewHolder
。我可以为两者分享吗?如何?
class RecyclerAdapter(val movies: List<Movie>):
RecyclerView.Adapter<RecyclerOneViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerOneViewHolder {
var itemView = LayoutInflater.from(parent.context).inflate(
R.layout.layout_list, parent, false)
return RecyclerOneViewHolder(itemView)
}
override fun getItemCount(): Int {
return movies.size
}
override fun onBindViewHolder(holderOne: RecyclerOneViewHolder, position: Int) {
holderOne.title.text = movies.get(position).title
Picasso.get().load("https://image.tmdb.org/t/p/original"+movies.get(position).img)
.into(holderOne.image)
}
override fun getItemViewType(position: Int): Int {
return super.getItemViewType(position)
}
解决方案
你应该改变这个:
class RecyclerAdapter(val movies: List<Movie>): RecyclerView.Adapter<RecyclerOneViewHolder>()
对此:
class RecyclerAdapter(val movies: List<Movie>):
RecyclerView.Adapter<RecyclerView.ViewHolder>()
并且您可以将 viewholder 转换为您的 viewholder,但您也需要实现getItemViewType()
方法。
推荐阅读
- c++ - 为什么使用 cv::Mat (opencv) 更改指向数据的指针对 cv::filter2D 有问题?
- c++ - 结构 C++ 中的函数
- rust - 处理流时如何删除或忽略错误?
- python - Python OpenCV 透视变换
- c# - 为异步 UI 消费包装慢速同步 I/O
- python-3.x - 我怎样才能找到身份证?
- java - 无法从 scoped_dir6312_32763/internal 加载扩展。管理员使用 ChromeDriver Selenium 禁用了加载解压扩展
- java - 从另一个对象列表中删除重复的列表对象值
- c# - 实体框架 - 一对多关系 - 仅映射到一个元素
- java - 带参数的 Https 认证