Как добавить заголовок в утилиту просмотра в kotlin? - PullRequest
0 голосов
/ 26 октября 2019

после получения успешного ответа заголовок добавлен в первую позицию окна повторного просмотра, но первый элемент списка не отображается. список содержит 5 элементов, но показывает только последние 4 элемента. как показать все элементы списка с дополнительным добавленным заголовком в обзоре переработчика.

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
    }

}

1 Ответ

1 голос
/ 26 октября 2019

Как прокомментировал ваш вопрос @ hiddeneyes02 , вы должны получить ArrayIndexOutOfBoundsException.

Кстати, когда вы увеличили размер categoryList на override fun getItemCount(), вы также должны уменьшить позицию наодин для получения связанного элемента в вашем списке, когда его владельцем является экземпляр вашего представления, а не заголовок.
Так что ваш onBindViewHolder должен выглядеть следующим образом:

 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())
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...