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