永远不会调用Firebase populateViewHolder

时间:2016-08-01 23:09:26

标签: android firebase-realtime-database firebaseui

我的firebase控制台中有以下结构。我试图读取值并显示所有用户,但populateViewHolder永远不会被调用。

   users
     +OW5BYennVRXvfzOjfKpup9rZEYv2
     -email: "abc@gmail.com"
     -username: "abc"

在下面的代码中,我收到项目计数为1

 mAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
        @Override
        public void onItemRangeInserted(int positionStart, int itemCount) {
            super.onItemRangeInserted(positionStart, itemCount);
            int friendlyMessageCount = mAdapter.getItemCount();
            int lastVisiblePosition =
                    mManager.findLastCompletelyVisibleItemPosition();
            // If the recycler view is initially being loaded or the
            // user is at the bottom of the list, scroll to the bottom
            // of the list to show the newly added message.
            if (lastVisiblePosition == -1 ||
                    (positionStart >= (friendlyMessageCount - 1) &&
                            lastVisiblePosition == (positionStart - 1))) {
                recyclerView.scrollToPosition(positionStart);
            }
        }
    }); 

这是我的代码

    @Override
public View onCreateView (LayoutInflater inflater, ViewGroup container,
                          Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);
    View rootView = inflater.inflate(R.layout.fragment_home_page, container, false);

    mDatabase = FirebaseDatabase.getInstance().getReference();

    recyclerView = (RecyclerView) rootView.findViewById(R.id.recycler_view);
    recyclerView.setHasFixedSize(true);

    return rootView;
}
      @Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    mManager = new LinearLayoutManager(getActivity());
    mManager.setReverseLayout(true);
    mManager.setStackFromEnd(true);
    Query postsQuery = mDatabase.child("users");
    mAdapter = new FirebaseRecyclerAdapter<User, PostViewHolder>(User.class, R.layout.post,
            PostViewHolder.class, postsQuery) {

        @Override
        protected void populateViewHolder(PostViewHolder viewHolder, User model, int position) {
            final DatabaseReference postRef = getRef(position);
            final String postKey = postRef.getKey();
            viewHolder.bindToPost(model);
        }
    };

    mAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
        @Override
        public void onItemRangeInserted(int positionStart, int itemCount) {
            super.onItemRangeInserted(positionStart, itemCount);
            int friendlyMessageCount = mAdapter.getItemCount();
            int lastVisiblePosition =
                    mManager.findLastCompletelyVisibleItemPosition();
            // If the recycler view is initially being loaded or the
            // user is at the bottom of the list, scroll to the bottom
            // of the list to show the newly added message.
            if (lastVisiblePosition == -1 ||
                    (positionStart >= (friendlyMessageCount - 1) &&
                            lastVisiblePosition == (positionStart - 1))) {
                recyclerView.scrollToPosition(positionStart);
            }
        }
    });

    recyclerView.setAdapter(mAdapter);
}

PlaceHolder:

   public class PostViewHolder  extends RecyclerView.ViewHolder {
public TextView title, emailt;

public PostViewHolder(View view) {
    super(view);
    title = (TextView) view.findViewById(R.id.title);
    emailt = (TextView) view.findViewById(R.id.count);

}

public void bindToPost(User post, View.OnClickListener starClickListener) {
    title.setText(post.username);
    emailt.setText(post.email + "Likes");

}

public void bindToPost(User post) {
    title.setText(post.username);
    emailt.setText(post.email + "Likes");
}
}

1 个答案:

答案 0 :(得分:1)

问题是RecyclerView的高度为WrapContent,所以请确保您的回收器高度设置为Match_Parent。这将解决这个问题。

<android.support.v7.widget.RecyclerView
            android:id="@+id/recycler_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scrollbars="vertical"
            />