- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我从 firebase 获取数据,并将其填充到 userMessageList.adapter
中,并收到通知,并且 getItemCount
显示正确的计数,但 onBindViewHolder
仅运行一次对于用户消息列表的第 1 个位置。 onBindViewHolder
不适用于进一步的位置或数据
我没有找到与我的问题相关的解决方案
THIS IS MY ADAPTER CLASS
public class MessageAdapter extends RecyclerView.Adapter<MessageAdapter.MessageViewHolder> {
private List <Messages> userMessagesList;
private DatabaseReference firebaseDatabase,users;
private FirebaseAuth auth;
public MessageAdapter(List<Messages> userMessagesList){
this.userMessagesList = userMessagesList;
}
@NonNull
@Override
public MessageViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.custom_messages_layout,viewGroup,false);
auth = FirebaseAuth.getInstance();
return new MessageViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final MessageViewHolder messageViewHolder, int i) {
String messageSenderID = auth.getCurrentUser().getUid();
Messages messages = userMessagesList.get(i);
String fromUserID = messages.getFrom();
String fromMessageType = messages.getType();
users = FirebaseDatabase.getInstance().getReference().child("Users").child(fromUserID);
users.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.hasChild("image")){
final String receiverImage = dataSnapshot.child("image").getValue().toString();
Picasso.get()
.load(receiverImage)
.placeholder(R.drawable.profile_image)
.into(messageViewHolder.receiverProfileImage);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
if(fromMessageType.equals("text")){
messageViewHolder.receiverMessageText.setVisibility(View.INVISIBLE);
messageViewHolder.receiverProfileImage.setVisibility(View.INVISIBLE);
if(fromUserID.equals(messageSenderID)){
messageViewHolder.senderMessageText.setBackgroundResource(R.drawable.sender_messages_layout);
messageViewHolder.senderMessageText.setTextColor(Color.BLACK);
messageViewHolder.senderMessageText.setText(messages.getMessage());
}
else{
messageViewHolder.receiverMessageText.setVisibility(View.INVISIBLE);
messageViewHolder.receiverProfileImage.setVisibility(View.VISIBLE);
messageViewHolder.receiverMessageText.setVisibility(View.VISIBLE);
messageViewHolder.receiverMessageText.setBackgroundResource(R.drawable.receiver_messeges_layout);
messageViewHolder.receiverMessageText.setTextColor(Color.BLACK);
messageViewHolder.receiverMessageText.setText(messages.getMessage());
}
}
}
@Override
public int getItemCount() {
return userMessagesList.size();
}
public class MessageViewHolder extends RecyclerView.ViewHolder{
public TextView senderMessageText, receiverMessageText;
public CircleImageView receiverProfileImage;
public MessageViewHolder(@NonNull View itemView) {
super(itemView);
senderMessageText =itemView.findViewById(R.id.sender_message_text);
receiverMessageText = itemView.findViewById(R.id.receiver_message_text);
receiverProfileImage =itemView.findViewById(R.id.message_profile_image);
}
}
}
THIS IS ACTIVITY CODE WHERE IAM POPULATING THE userMessageList
rootRef.child("Messages")
.child(messageSenderID).
child(messageReceivedID)
.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot
dataSnapshot, @Nullable String s) {
Messages messages = dataSnapshot.getValue(Messages.class);
messagesList.add(messages);
messageAdapter.notifyDataSetChanged();
}
}
最佳答案
正如上面评论中的 Pemba Tamang 所说,您的适配器中不应该有任何网络或数据库相关的代码。
解决您问题的算法:1. 获取适配器外部的消息列表。2. 订阅适配器外部的子更改。3. 当子项更改时,转到查看模型,通过其 id 找到此消息并更新此信息。4.更新您的适配器
如果您使用 DiffUtils 更新您的适配器,也会很好。它只会绑定(bind)更改的子项,而不是全部。请参阅:https://developer.android.com/reference/android/support/v7/util/DiffUtil
关于java - RecyclerView 的 onBindview Holder 不适用于第二个位置,但我在 getItemCount 中计数为 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57411344/
我遇到以下问题,不幸的是,我的应用程序在进入下一个 Activity 时停止了。罪魁祸首是: public class RecyclerAdapter extends RecyclerView.
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我调查了关于这个问题的几个 SO 答案(here、here、and here),但没有一个提议的解决方案有效。我的问题是没有显示我的 RecyclerView 列表项。我在 MessengerRecy
我有一个 recyclerView,它让我崩溃: 这是我的开始 Activity : public class StartActivity extends AppCompatActivity {
在您将问题标记为重复之前请阅读问题... 所以我正在尝试使用 Intent 从图库中选择多张图片。当我选择多于 1 张图片时,它工作正常,当我只选择 1 张图片时,它会生成此错误。我寻找了每个 Nul
我为 RecyclerView 创建了一个 FirebaseRecylerAdapter,我的问题是 FirebaseRecyclerAdapter 没有调用 onCreateViewHolder(因
我想在任何给定时间获取“Activity ”键的计数。现在根据 API 文档 getItemCount() 应该返回此值。 然而事实并非如此。过期的键不会减少 getItemCount() 的值。为什
我查看了 SO 上关于此的其他问题,并逐字逐句匹配,但我一定错过了一些东西,因为没有任何效果。 getItemCount() 返回零,但我调试了我的数据列表,它似乎正确地添加了我的所有数据,所以与适配
我创建了一个工作正常的适配器。现在,我需要计算适配器中数据项的数量。我正在使用函数 getItemcount() ,但我每次都得到 0。另外,我正在使用 Firebase 来处理我的数据库。 fi
我刚刚制作了一个回收器 View ,但它没有工作,所以我在 getItemCount 上设置了一个断点,但该方法没有被调用。我从未见过 SO 上的任何其他人有这个特定问题,我相信这是非常明显的事情。这
如果 RecyclerView 为空,我会尝试显示 TextView。但是 ListAdapter 的 getItemCount() 总是返回 0,即使 RecyclerView 显示项目也是如此。
RecyclerView 有一个 InfiniteScrollListener 并且在该监听器内部,在 OnScrolled() 方法中我计算可见项和总项数以检查是否应加载新项。当totalItemC
请调查一下,让我知道哪里出了问题。 public class MyAdapter extends RecyclerView.Adapter { private ItemData[] items
本文整理了Java中com.tc.admin.common.XComboBox.getItemCount()方法的一些代码示例,展示了XComboBox.getItemCount()的具体用法。这些代
本文整理了Java中org.jfree.data.xy.XYIntervalSeries.getItemCount()方法的一些代码示例,展示了XYIntervalSeries.getItemCoun
本文整理了Java中org.jfree.data.xy.YIntervalSeries.getItemCount()方法的一些代码示例,展示了YIntervalSeries.getItemCount(
我遇到了一个奇怪的错误,如果 getItemCount 返回 1(数据结构的大小),适配器不会显示任何卡片。 我的适配器代码 - public class SingleAdapter extends
我知道我的问题已被问过好几次,但我已经搜索了一段时间,但没有一个答案能解决我的问题。问题是,当我在我的“HomeFragment”中创建 recyclerview 适配器和方法“onViewCreat
我从使用 FlatList 切换到 VirtualizedList,并收到错误 this.props.getItemCount 不是函数。当我运行调试器时,VirtualizedList.js 抛出异
文档对 getItemCount() 的描述如下: Returns the number of items in the adapter bound to the parent RecyclerVie
我是一名优秀的程序员,十分优秀!