How to implement endless list with a RecyclerView inside a fragment

心已入冬 提交于 2020-07-23 07:41:07

问题


How do i load more to my RecyclerView list once the user scrolls near the bottom?

I have had a look at this stack overflow page but I'm still struggling with trying to implement the code from the Kotlin answer into my code.

For better context id like you guys to have a look at my previous question, this shows you how i created my fragment in android studio (it was done by clicking on fragment (list) and choosing an empty fragment).

inside of my onCreateView i have this piece of code

view.list.addOnScrollListener(object : RecyclerView.OnScrollListener() {


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

                val contentHeight = view.list.height - (view.list.paddingTop + view.list.paddingBottom)

                val distanceToBottom = view.list.computeVerticalScrollRange() - view.list.computeVerticalScrollOffset() - contentHeight

                val metrics = DisplayMetrics()

                activity!!.windowManager.getDefaultDisplay().getMetrics(metrics)
                //val Measuredwidth = metrics.widthPixels
                val Measuredheight = metrics.heightPixels

                // everything looks like its in pixels. It is important that everything is one unit type to ensure accurate calculations
                // Once this is all finished i will ask a question in stack overflow on how to ensure its one unit type


                // using the screen height and timesing it by 2 to know when to load more data
                if (Measuredheight * 2 > distanceToBottom) {

                    Toast.makeText(view.list.context, "Scrolling $distanceToBottom, this is the screen height excluding the nav bar in pixels " + Measuredheight + " more content needs to be loaded", Toast.LENGTH_SHORT).show()

                    // Load more function to be placed here
                }


            }


        })

----------------------Edit---------------------

Ive been looking into the paging library and I've come across this tutorial, however I'm still having trouble putting the code in a fragment. This is the source code for the tutorial, so this is the code i have used in my project.

What I think I'm supposed to do is inside of my onCreateView, i have to place this piece of code

                adapter = UserAdapter()

                val itemViewModel = ViewModelProviders.of(view.list.context)
                    .get(UserViewModel::class.java)

                itemViewModel.userPagedList.observe(view.list.context, Observer {
                    adapter.submitList(it)
                })

                list.adapter = adapter

However, i am getting errors and some of the code seems to be deprecated. Can somebody please show me the code that i need to use in order to have a RecyclerView inside of a fragment please so that i can accept their answer.


回答1:


What you're looking for is a Library called Paging it is part of Android Architecture Component.

Here is the codelab and note that the Paging 3 is out https://developer.android.com/topic/libraries/architecture/paging/v3-overview



来源:https://stackoverflow.com/questions/62846910/how-to-implement-endless-list-with-a-recyclerview-inside-a-fragment

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!