Reputation: 452
I'm studying using viewtype in recyclerview.
I use two viewtypes. when I tested for changing viewtype, there is no change.
I inserted viewtype1 but the result is returned to viewtype0.
the log is like below D/TAG: ProfileViewHolder onCreateViewHolder
D/TAG: ItemViewHolder onBindViewHolder
onCreateViewHolder is right, but the ItemViewHolder is not right. each other different.
what should I fix? here is my code.
class RecyclerViewAdapter(private val context: Context, private val items : ArrayList<DetailModel>) : RecyclerView.Adapter<RecyclerView.ViewHolder>(){
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if(holder is ProfileViewHolder) {
holder.name.text = items[position].login
Glide.with(context)
.load(items[position].profileImage)
.centerCrop()
.override(200,200)
.error(R.drawable.image_not_found)
.into(holder.profileImage)
Log.d("TAG","ProfileViewHolder onBindViewHolder")
}else if(holder is ItemViewHolder){
holder.name.text = items[position].name
holder.description.text = items[position].description
holder.stargazersCount.text = items[position].stargazersCount.toString()
Log.d("TAG","ItemViewHolder onBindViewHolder")
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
if(viewType == 0) {
val inflatedView: View = LayoutInflater.from(parent.context)
.inflate(R.layout.detail_item, parent, false)
Log.d("TAG","ProfileViewHolder onCreateViewHolder")
return ItemViewHolder(inflatedView)
}
else {
val inflatedView: View = LayoutInflater.from(parent.context)
.inflate(R.layout.profile_item, parent, false)
Log.d("TAG","ItemViewHolder onCreateViewHolder")
return ProfileViewHolder(inflatedView)
}
}
override fun getItemCount()=items.size
override fun getItemId(position: Int): Long {
return items.get(position).id.toLong()
}
class ItemViewHolder(v: View) : RecyclerView.ViewHolder(v) {
val name :TextView = itemView.findViewById(R.id.name)
val description : TextView = itemView.findViewById(R.id.description)
val stargazersCount :TextView = itemView.findViewById(R.id.stargazersCount)
}
class ProfileViewHolder(v: View) : RecyclerView.ViewHolder(v) {
val name :TextView = itemView.findViewById(R.id.login)
val profileImage : ImageView = itemView.findViewById(R.id.profileImage)
}
}
OnCreate
var detail = DetailModel()
detail.login= userId
detail.viewType=1
itemList.add(detail)
setAdapter()
Upvotes: 0
Views: 431
Reputation: 15535
viewType
in onCreateViewHolder
is returned by RecyclerView.Adapter
, To assign viewType to this adapter for each position, you need to override getItemViewType
.
In your case it might be like this.
override fun getItemViewType(position: Int): Int {
val detail = items[position]
return detail.viewType
}
Upvotes: 2