MRX
MRX

Reputation: 1442

Firebase populateViewHolder is never called

I have below structure in my firebase console . I am trying to read the values and display all the users but populateViewHolder never gets called.

   users
     +OW5BYennVRXvfzOjfKpup9rZEYv2
     -email: "[email protected]"
     -username: "abc"

While in the below code I receive the item count as 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);
            }
        }
    }); 

Here is my code

    @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");
}
}

Upvotes: 4

Views: 1287

Answers (1)

Prashanth
Prashanth

Reputation: 1369

The Problem is RecyclerView had a height of WrapContent , So Please Make Sure your recycler Height is set to Match_Parent. This will fix this issue.

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

Upvotes: 1

Related Questions