1

在此处输入图像描述我无法在 HeterogeneousRecyclerview.it 内容水平和垂直回收视图中使用分页。我想在 VerticalRecycleview 中使用分页没完没了。当我尝试这样做时,它不会满足条件。我将返回 visibleItemCount、totalItemCount 和 firstVisibleItemPosition,这将无助于加载更多数据。请给我建议。

Recycle view:
 val recyclerView = findViewById<RecyclerView>(R.id.rvMain)
        val adapter = MainAdapter(this, getObject())
        recyclerView.adapter = adapter
        recyclerView.layoutManager = LinearLayoutManager(this)
        recycleViewScroll(recyclerView)

 private fun getObject(): ArrayList<Any> {
        jsonHelper?.readHorizontalItemsJSON()?.get(0)?.let { objects.add(it) }
        jsonHelper?.readVerticalItemsJSON()?.get(0)?.let { objects.add(it) }
        jsonHelper?.readHorizontalItemsJSON()?.get(0)?.let { objects.add(it) }
        return objects as ArrayList<Any>
    }

private fun recycleViewScroll(recyclerView: RecyclerView) {
        recyclerView.addOnScrollListener(object :
            RecyclerView.OnScrollListener() {
            override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
                super.onScrolled(recyclerView, dx, dy)



                val visibleItemCount = recyclerView.layoutManager!!.childCount
                val totalItemCount = recyclerView.layoutManager!!.itemCount
                val firstVisibleItemPosition =
                    (recyclerView.layoutManager as LinearLayoutManager).findFirstVisibleItemPosition()
                val lastpositionView = (recyclerView.layoutManager as LinearLayoutManager).findLastVisibleItemPosition()
                //val lastpositionView = (recyclerView.layoutManager as LinearLayoutManager).findLastVisibleItemPosition()
                println("dsfdsfdsfdfd----->" + visibleItemCount + "," + totalItemCount + "," + firstVisibleItemPosition!! +","+lastpositionView)

              if (!isLoading && !isLastPage) {//
                     if (visibleItemCount + firstVisibleItemPosition!! >= totalItemCount && firstVisibleItemPosition!! >= 0 && totalItemCount >= PAGE_SIZE) {
                         loadMoreItems()
                     }
                 }


            }
        })
    }

}`


Adapter:


class MainAdapter(private val context: Context, private val items: ArrayList<Any>?=null) :
    RecyclerView.Adapter<RecyclerView.ViewHolder>() {
    private val jsonHelper = JsonHelper(context)

    //this method returns the number according to the Vertical/Horizontal object
    override
    fun getItemViewType(position: Int): Int {
        if (items?.get(position) is HorizontalModel)
            return HORIZONTAL
        return if (items?.get(position) is VerticalModel) VERTICAL else -1
    }

    override
    fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
        val inflater = LayoutInflater.from(context)
        val view: View
        val holder: RecyclerView.ViewHolder
        when (viewType) {
            HORIZONTAL -> {
                view = inflater.inflate(R.layout.layout_horizontal_recycler_view, parent, false)
                holder = HorizontalViewHolder(view)
            }
            VERTICAL -> {
                view = inflater.inflate(R.layout.layout_vertical_recycler_view, parent, false)
                holder = VerticalViewHolder(view)
            }
            else -> {
                view = inflater.inflate(R.layout.layout_horizontal_recycler_view, parent, false)
                holder = HorizontalViewHolder(view)
            }
        }
        return holder
    }

    override
    fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
        if (holder.itemViewType == HORIZONTAL)
            horizontalView(holder as HorizontalViewHolder)
        else if (holder.itemViewType == VERTICAL)
            verticalView(holder as VerticalViewHolder)
    }

    private fun horizontalView(holder: HorizontalViewHolder) {
        val adapter = HorizontalAdapter(context, jsonHelper.readHorizontalItemsJSON()!!)
        holder.recyclerView.layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)
        holder.recyclerView.adapter = adapter
    }

    private fun verticalView(holder: VerticalViewHolder) {
        val adapter = VerticalAdapter(context, jsonHelper.readVerticalItemsJSON()!!)
        holder.recyclerView.layoutManager = LinearLayoutManager(context)
        holder.recyclerView.adapter = adapter
    }

    override
    fun getItemCount(): Int {
        return items?.size ?:0
    }

    inner class HorizontalViewHolder internal constructor(itemView: View) : RecyclerView.ViewHolder(itemView) {
        internal var recyclerView: RecyclerView = itemView.findViewById(R.id.rvHorizontal)
    }

    inner class VerticalViewHolder internal constructor(itemView: View) : RecyclerView.ViewHolder(itemView) {
        internal var recyclerView: RecyclerView = itemView.findViewById(R.id.rvVertical)
    }
}
4

0 回答 0