首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RecyclerView中的RecyclerView,具有两个RecyclerView的分页

RecyclerView中的RecyclerView,具有两个RecyclerView的分页
EN

Stack Overflow用户
提问于 2019-02-28 15:24:55
回答 1查看 104关注 0票数 0

我在recyclerview中实现了一个带有分页功能的回收视图,调用addOnScrollListner,但它没有为子回收视图触发。

下面是我实现的内容:

代码语言:javascript
复制
class NSREActivity : AppCompatActivity() {


private var previousTotal = 0
private var loading = true
private val visibleThreshold = 5
private var firstVisibleItem = 0
private var visibleItemCount = 0
private var totalItemCount = 0

private lateinit var mAdapter: RecyclerGenericKAdapter<HashTags>
private var mList: ArrayList<HashTags> = ArrayList()
private var mChildList: ArrayList<HashTags> = ArrayList()

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_nsre)

    initData()

    //Usage of generic recycler view
    mAdapter = RecyclerGenericKAdapter(mList, R.layout.item_layout, object : RecyclerKallback<HashTags> {
        override fun bindData(model: HashTags, position: Int, itemView: View) {

            val name = itemView.findViewById<TextView>(R.id.mainName)
            val childRv = itemView.findViewById<RecyclerView>(R.id.childRecycler)

             name.text = model.tag

            itemView.setOnClickListener {
                Toast.makeText(this@NSREActivity, model.tag, Toast.LENGTH_SHORT).show()

                setChildAdapter(childRv)

            }
        }
    })

    recyclerMain.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
    recyclerMain.adapter = mAdapter

}

private fun setChildAdapter(child : RecyclerView){

    val adt = RecyclerGenericKAdapter(mChildList, R.layout.item_sample_rv, object : RecyclerKallback<HashTags> {
        override fun bindData(model: HashTags, position: Int, itemView: View) {

            val name = itemView.findViewById<TextView>(R.id.text)
            name.text = model.tag

            itemView.setOnClickListener {
                Toast.makeText(this@NSREActivity, model.tag, Toast.LENGTH_SHORT).show()
            }
        }
    })

    val mLayoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
    child.layoutManager = mLayoutManager
    child.adapter = adt

    child.addOnScrollListener(object : RecyclerView.OnScrollListener() {

        override fun onScrolled(recyclerView: RecyclerView?, dx: Int, dy: Int) {
            super.onScrolled(recyclerView, dx, dy)

            visibleItemCount = child.childCount
            totalItemCount = mLayoutManager.itemCount
            firstVisibleItem = mLayoutManager.findFirstVisibleItemPosition()

            if (loading) {
                if (totalItemCount > previousTotal) {
                    loading = false
                    previousTotal = totalItemCount
                }
            }
            if (!loading && totalItemCount - visibleItemCount <= firstVisibleItem + visibleThreshold) {
                // End has been reached

                Log.e("Yaeye!", "end called")

                // Do something
                addData()

                loading = true
            }
        }
    })

}

}

我在recyclerview中实现了一个带有分页功能的回收视图,调用addOnScrollListner,但它没有为子回收视图触发。当它达到主回收器视图的最后一个索引时,它将为子回收器视图调用addOnScrollListner。

如何在带有分页的recyclerview内部调用recyclerview?

EN

回答 1

Stack Overflow用户

发布于 2019-02-28 16:20:37

我不确定这是否是一种合适的方式,但我也遇到了类似的问题,我设法用这种方式解决了它:

我没有检查滚动,但我正在检查最后一项何时被绑定:

代码语言:javascript
复制
class PaginationAdapter : RecyclerView.Adapter<RecyclerView.Holder> {

    var lastItemCreatedHandler: (() -> Unit)? = null

    ...

    override fun onBindViewHolder(holder: RecyclerView.Holder, position: Int) {
        if (position == getItemCount() - 1) {
            lastItemCreatedHandler?.invoke()
        }

        ...
    }

}

然后如果应该有更多的项目,我会显示进度,下载更多的数据,等等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54920460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档