Firebase populateViewHolder永远不会被调用 [英] Firebase populateViewHolder is never called

查看:168
本文介绍了Firebase populateViewHolder永远不会被调用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

 用户
+ OW5BYennVRXvfzOjfKpup9rZEYv2
-email:abc@gmail.com
-username:abc

在下面的代码中,我收到的物品计数为1 / b

pre $ m $ c $ 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(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);
查看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
保护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 $ b $ public void onItemRangeInserted(int positionStart,int itemCount){
super.onItemRangeInserted(positionStart, itemCount);
int friendlyMessageCount = mAdapter.getItemCount();
int lastVisiblePosition =
mManager.findLastCompletelyVisibleItemPosition();
//如果回收者视图最初被加载或
//用户位于列表的底部,滚动到列表的底部
//显示新添加的消息
if(lastVisiblePosition == -1 ||
(positionStart> =(friendlyMessageCount - 1)&
lastVisiblePosition ==(positionStart - 1))){
recyclerView.scrollToPosition(positionStart);
}
}
});

recyclerView.setAdapter(mAdapter);

$ / code>

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);


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


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


$ / code $ / pre

解决方案

问题是RecyclerView有一个WrapContent的高度,所以请确保您的回收站高度设置为Match_Parent。

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


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: "abc@gmail.com"
     -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");
}
}

解决方案

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"
            />

这篇关于Firebase populateViewHolder永远不会被调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆