1

I'm working on a firebase realtime database android project. I build a feed system that shows all the users posts but it sorts all data at once. I need to show 10 posts then show progress bar then load 10 others etc...

Explore Fragment

class ExploreFragment : Fragment() {
private var postAdapter:PostAdapter? = null
private var postList: MutableList<Post>? = null
override fun onCreateView(
    recyclerView.layoutManager = linearLayoutManager
    postList= ArrayList()
    postAdapter = context?.let { PostAdapter(it,postList as ArrayList<Post>) }
    recyclerView.adapter = postAdapter
    retrievePosts()
    return view
}
private fun retrievePosts() {
    val postRef = FirebaseDatabase.getInstance().reference.child("Posts")
    postRef.addValueEventListener(object :ValueEventListener{
        override fun onDataChange(p0: DataSnapshot) {
            if (p0.exists()){
                postList!!.clear()
                for (snapshot in p0.children){
                    val post = snapshot.getValue(Post::class.java)!!
                    (postList as ArrayList<Post>).add(post)
                }
               postAdapter?.notifyDataSetChanged()
            }
        }
        override fun onCancelled(p0: DatabaseError) {
        }
    })
}}

PostAdapter

class PostAdapter(private val mContext: Context,private val mPost: List<Post>
):RecyclerView.Adapter<PostAdapter.ViewHolder>()
  {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
    val view = LayoutInflater.from(mContext).inflate(R.layout.post_layout, parent, false)
    return ViewHolder(view)
 }
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    val post = mPost[position]
        Picasso.get().load(post.getPost()).into(holder.postImg)
    publisherInfo(holder.profileImg, holder.userName, post.getPublisher()) 
}
override fun getItemCount(): Int {return mPost.size}
inner class ViewHolder(@NonNull itemView: View): RecyclerView.ViewHolder(itemView)
{
    var profileImg:CircleImageView
    var postImg:ImageView
    var userName:TextView
    init {
        profileImg = itemView.findViewById(R.id.profile_image_post)
        postImg = itemView.findViewById(R.id.post_image)
        userName = itemView.findViewById(R.id.username_post)           
    }
}
private fun publisherInfo(profileImg: CircleImageView, userName: TextView, publisherID: String) {
    val userRef = FirebaseDatabase.getInstance().reference.child("Users").child(publisherID)
    userRef.addValueEventListener(object : ValueEventListener {
        override fun onDataChange(p0: DataSnapshot) {
            if (p0.exists()) {
                val user = p0.getValue<User>(User::class.java)
                Picasso.get().load(user!!.getImage()).into(profileImg)
                userName.text = user!!.getUsername()
            }
        }
        override fun onCancelled(p0: DatabaseError) {
        }
    })
}    
}

I remove some lines to make the code simple

Bryt Brode
  • 29
  • 4
  • use the [FirebaseRecyclerPagingAdapter](https://github.com/firebase/FirebaseUI-Android/blob/master/database/README.md#using-the-firebaserecyclerpagingadapter) – Sinner of the System Dec 28 '20 at 22:11
  • @SinneroftheSystem Can you help to implement it in this case? – Bryt Brode Dec 29 '20 at 13:24
  • just follow the instructions on that link and set `pageSize` to 10. Learn more [here](https://proandroiddev.com/firebase-database-paging-android-f59e6dd0dc75) and [here](https://medium.com/firebase-developers/firestore-pagination-in-android-using-firebaseui-library-1d7fe1a75704) – Sinner of the System Dec 29 '20 at 15:07
  • If you consider at some point in time to try using [Cloud Firestore](https://firebase.google.com/docs/firestore/), **[this](https://stackoverflow.com/questions/50741958/how-to-paginate-firestore-with-android)** is a recommended way in which you can paginate queries by combining query cursors with the limit() method. I also recommend you take a look at this **[video](https://www.youtube.com/watch?v=KdgKvLll07s)** for a better understanding. – Alex Mamo Dec 29 '20 at 16:23

0 Answers0