Reputation: 136
after getting successful response, Header added to first position of recyclerview but first item of list not showing. list having 5 items but its shows only last 4 items. how to show all list items with extra added header in recyclerview.
class AllCategoryAdapter(val categoryList : List<AllCategoryBean>) : RecyclerView.Adapter<RecyclerView.ViewHolder>()
{
private val TYPE_HEADER : Int = 0
private val TYPE_LIST : Int = 1
override fun getItemViewType(position: Int): Int {
if(position == 0)
{
return TYPE_HEADER
}
return TYPE_LIST
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
if(viewType == TYPE_HEADER)
{
val header = LayoutInflater.from(parent.context).inflate(R.layout.cv_all_category_header,parent,false)
return ViewHolderHeader(header)
}
val header = LayoutInflater.from(parent.context).inflate(R.layout.cv_all_category,parent,false)
return ViewHolder(header)
}
override fun getItemCount(): Int {
return categoryList.size + 1
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val listItem : AllCategoryBean = categoryList[position]
if(holder is ViewHolderHeader)
{
holder.tvCategoyName.setText("All Category")
}
if(holder is ViewHolder)
{
holder.tvCategoyName.setText(listItem.getCategoryName())
}
}
class ViewHolder(itemView : View) : RecyclerView.ViewHolder(itemView)
{
val tvCategoyName = itemView.findViewById(R.id.tvCategoyName) as TextView
}
class ViewHolderHeader(itemView : View) : RecyclerView.ViewHolder(itemView)
{
val tvCategoyName = itemView.findViewById(R.id.tvCategoyName) as TextView
}
}
Upvotes: 2
Views: 9133
Reputation: 2087
As @hiddeneyes02 commented in your question, you should be getting ArrayIndexOutOfBoundsException
.
BTW when you increased categoryList
size by override fun getItemCount()
, you must also decrease position by one for getting related item in your list when holder is instance of your view, not header.
So your onBindViewHolder
must look like this:
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
if (holder instanceof ViewHolderHeader) {
holder.tvCategoyName.setText("All Category")
} else if (holder instanceof ViewHolder) {
val listItem : AllCategoryBean = categoryList[position - 1]
holder.tvCategoyName.setText(listItem.getCategoryName())
}
Upvotes: 2