RecyclerView внутри RecyclerView с нумерацией страниц для обоих RecyclerView - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть реализация recyclerview внутри recyclerview с вызовом нумерации страниц addOnScrollListner, но он не сработал для дочернего recyclerview.

Вот что я реализую:

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 для дочернего просмотра.

Как вызвать обзор переработчика внутри просмотра переработчика с нумерацией страниц?

1 Ответ

0 голосов
/ 28 февраля 2019

Я не уверен, что это правильный путь, но у меня была похожая проблема, и мне удалось ее решить следующим образом:

Я не проверял прокрутку, но проверял, когда последний элемент связан:

class PaginationAdapter : RecyclerView.Adapter<RecyclerView.Holder> {

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

    ...

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

        ...
    }

}

И затем, если должно быть больше предмета, я показываю прогресс, загружаю больше данных и так далее.

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