在Firebase回收器适配器中仅加载x个项目

时间:2018-09-25 15:24:31

标签: java android firebase firebase-realtime-database recycler-adapter

嗨,我有一个Firebase FirebaseRecyclerAdapter,在我的数据库的Firebase项目中,我有30多个值,在我的应用中,我只想显示前x个项目。

我在互联网上进行搜索,但没有找到只能加载x个项目的方法。

这是我的代码:

        mAdapter = new FirebaseRecyclerAdapter<Post, Holder>(
            Post.class,
            R.layout.item_layout,
            Holder.class,
            mRef
    ){

        @Override
        public void onBindViewHolder(Holder viewHolder, int position) {
            Post post = (Post) this.getItem(position);
            ((Holder) viewHolder).bind(post);

        }
        @Override
        public Holder onCreateViewHolder(ViewGroup parent, int viewType) {
            LayoutInflater inflater = LayoutInflater.from(parent.getContext());
            View view;
            view = inflater.inflate(R.layout.item_layout , parent, false);
            return new Holder(view);
        }
 }

这是我的持有人课程:

public static class EventsOldHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    public EventsOldHolder(View itemView) {

    }
    public void bind(final Post post) {
    }
    @Override
    public void onClick(View view) {
    }

我知道,当position的值大于x时,我可以隐藏元素,但是如果我有很多项目并隐藏所有元素,则我的应用程序运行速度会变慢,并且如果可以帮助我提供更好的解决方案。

1 个答案:

答案 0 :(得分:1)

要解决此问题,您应该将FirebaseRecyclerAdapter而不是query传递给mRef构造函数,我假设它是DatabaseReference对象。

假定您具有一个如下所示的数据库结构:

Firebase-root
    |
    --- posts
          |
          --- postId
                |
                --- title: "Post Title"
                |
                --- //Other details

要仅显示前5个项目,查询应如下所示:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
Query query = rootRef.child("posts").orderByChild("title").limitToFirst(5);
query.addListenerForSingleValueEvent(/* ... */);