Firebase populateViewHolder永远不会被调用

编程入门 行业动态 更新时间:2024-10-28 00:17:52
本文介绍了Firebase populateViewHolder永远不会被调用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 我的firebase控制台中有以下结构。我试图读取值,并显示所有的用户,但populateViewHolder永远不会被调用。

用户 + OW5BYennVRXvfzOjfKpup9rZEYv2 -email:abc@gmail -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" -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永远不会被调用

本文发布于:2023-11-08 09:40:31,感谢您对本站的认可!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:永远不会   Firebase   populateViewHolder

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!