Как получить recyclerView getItemCount - позиция начинается с 2 вместо 0 - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь соединить свой просмотрщик двух разных mutableArray и один textView.

Он работает правильно вместо переопределения. GetItemCount () начинается с позиции 0 вместо 2. Все данные поступают из хранилища и вызываются в классе MainActivity

В позиции 0 у меня есть собственный адаптер для newList, и он работает правильно, в позиции 1 у меня есть просмотр текста, и он работает правильно. В позиции 2 я хочу запустить этот список цветов, но по какой-то причине он пропустил 2 первых элемента из моего списка цветов.

Итак, мой вопрос, как я могу сделать мой

override fun getItemCount(): Int {
   return flowerList.size
}

Для запуска из положения 2 вместо положения 0

Вот мой полный код этого адаптера:

class MainAdapter(val flowerList: MutableList<Flowers>, val newsList: MutableList<News>, val context: Context) : RecyclerView.Adapter<MainAdapter.ViewHolder>() {

    private val TYPE_NEWS_LAYOUT = 0
    private val TYPE_TITLE_LAYOUT = 1
    private val TYPE_FLOWERS_LAYOUT = 2

    override fun onCreateViewHolder(parent: ViewGroup, position: Int): ViewHolder {
        if (position == TYPE_NEWS_LAYOUT) {
            val newsFeed = LayoutInflater.from(parent.context).inflate(R.layout.main_horizontal_recycler, parent, false)
            return ViewHolder(newsFeed)

        } else if (position == TYPE_TITLE_LAYOUT) {
            val textView = LayoutInflater.from(parent.context).inflate(R.layout.item_main_text_recycler, parent, false)
            return ViewHolder(textView)

        } else {
            val view = LayoutInflater.from(parent.context).inflate(R.layout.item_main_bottom_recycler, parent, false)
            return ViewHolder(view)
        }
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        if (position == 0) {
            holder.itemView.main_top_recycler_horizontal.layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)
            holder.itemView.main_top_recycler_horizontal.adapter = MainHorizontalAdapter(newsList)
        } else if (position == 1) {
            holder.middleTitle.text = "Text here"
        } else {
            val flower = flowerList[position]
            holder.flowerName.text = flower.flowername
            Glide.with(context).load(flower.mainimageurl).into(holder.flowerImage)
        }
    }

    override fun getItemViewType(position: Int): Int {
        if (position == 0) {
            return TYPE_NEWS_LAYOUT
        } else if (position == 1)
            return TYPE_TITLE_LAYOUT
        else
            return TYPE_FLOWERS_LAYOUT
    }

    override fun getItemCount(): Int {
        return flowerList.size
    }

    class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
        val flowerName = view.flower_name
        val flowerImage = view.flower_image
        val middleTitle = view.main_recycler_title
    }
}

1 Ответ

0 голосов
/ 09 января 2019

Увеличение счетчика будет проблемой, потому что onBindViewHolder вызывается каждый раз, когда представление перерабатывается. Вместо этого я думаю, что вы хотите изменить строку

FROM: val flower = flowerList[position]

TO: val flower = flowerList[position - 2] // subtracting two, to account for the first two positions, in the adapter, that are your News and Title views

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...