如何在firebase recyclerview android中实现分页或无限滚动
我正在做一个firebase实时数据库android项目。我构建了一个feed系统,它显示所有用户的帖子,但同时对所有数据进行排序。我需要显示10个职位,然后显示进度条,然后加载10个其他等 探索片段如何在firebase recyclerview android中实现分页或无限滚动,android,firebase,firebase-realtime-database,pagination,infinite-scroll,Android,Firebase,Firebase Realtime Database,Pagination,Infinite Scroll,我正在做一个firebase实时数据库android项目。我构建了一个feed系统,它显示所有用户的帖子,但同时对所有数据进行排序。我需要显示10个职位,然后显示进度条,然后加载10个其他等 探索片段 class ExploreFragment : Fragment() { private var postAdapter:PostAdapter? = null private var postList: MutableList<Post>? = null override fun o
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) {
}
})
}}
class-ExploreFragment:Fragment(){
专用变量postAdapter:postAdapter?=null
私有变量postList:MutableList?=null
覆盖创建视图(
recyclerView.layoutManager=linearLayoutManager
postList=ArrayList()
postaAdapter=context?.let{postaAdapter(it,postlistas ArrayList)}
recyclerView.adapter=postAdapter
检索职位()
返回视图
}
私人娱乐检索帖子(){
val postRef=FirebaseDatabase.getInstance().reference.child(“Posts”)
postRef.addValueEventListener(对象:ValueEventListener{
覆盖数据更改(p0:DataSnapshot){
if(p0.exists()){
postList!!.clear()
用于(p0.children中的快照){
val post=snapshot.getValue(post::class.java)!!
(作为ArrayList的postList)。添加(post)
}
postAdapter?.notifyDataSetChanged()
}
}
已取消覆盖乐趣(p0:DatabaseError){
}
})
}}
后适应器
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) {
}
})
}
}
class PostAdapter(private val mContext:Context,private val mPost:List
):RecyclerView.Adapter()
{
override onCreateViewHolder(父级:ViewGroup,viewType:Int):ViewHolder{
val view=LayoutInflater.from(mContext).充气(R.layout.post_布局,父级,false)
返回视图保持器(视图)
}
覆盖BindViewHolder(holder:ViewHolder,位置:Int){
val post=mPost[位置]
毕加索.get().load(post.getPost()).into(holder.postImg)
publisherInfo(holder.profileImg、holder.userName、post.getPublisher())
}
重写fun getItemCount():Int{return mPost.size}
内部类ViewHolder(@NonNull itemView:View):RecyclerView.ViewHolder(itemView)
{
var profileImg:CircleImageView
var postImg:ImageView
var用户名:TextView
初始化{
profileImg=itemView.findviewbyd(R.id.profile\u image\u post)
postImg=itemView.findviewbyd(R.id.post\u图像)
userName=itemView.findviewbyd(R.id.userName\u post)
}
}
private fun publisherInfo(profileImg:CircleImageView,用户名:TextView,publisherID:String){
val userRef=FirebaseDatabase.getInstance().reference.child(“用户”).child(publisherID)
userRef.addValueEventListener(对象:ValueEventListener{
覆盖数据更改(p0:DataSnapshot){
if(p0.exists()){
val user=p0.getValue(user::class.java)
Picasso.get().load(user!!.getImage()).into(profileImg)
userName.text=user!!.getUsername()
}
}
已取消覆盖乐趣(p0:DatabaseError){
}
})
}
}
< >我删除了一些代码,使代码简单的< /p>使用@ SnNeNoFS系统,在这种情况下您能帮助实现吗?只要按照该链接的指令,将<代码> PaxeSeS/<代码>设置为10。了解更多,如果您考虑在某个时间点尝试使用,则推荐通过组合查询光标来对查询进行分页。有限度方法。我也建议你看看这个更好的理解。使用@ SnNeNoFS系统,你能在这种情况下实现它吗?只要按照那个链接的指令,把代码> PuxeSeS/<代码>到10。了解更多,如果你考虑在某个时间点尝试使用,是一种推荐的方式,你可以在页面上分页。通过将查询游标与limit()方法相结合,我还建议您对此进行研究,以便更好地理解。