带有 Glide(或 Picasso)的 FirebaseRecyclerAdapter 在错误的位置加载图像
FirebaseRecycleAdapter with Glide(or Picasso) load image in wrong place
我使用 FirebaseRecycleAdapter 从 Firebase RealtimeDatabase 加载聊天数据。
我想以两种方式显示消息,所以左图与右图不同。
但图片有时会像图片一样错位。
这是我的代码:
mFirebaseAdapter = new FirebaseRecyclerAdapter<Message, MessageViewHolder>(
Message.class,
R.layout.item_message_onetoone,
MessageViewHolder.class,
databaseReference.child(Constant.CHILD_CHATONETOONE).child(myUid).child(clientUid)) {
@Override
protected void populateViewHolder(MessageViewHolder viewHolder, Message message, int position) {
String senderUid= message.getSenderUid();
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(RecyclerView.LayoutParams.WRAP_CONTENT, ActionBar.LayoutParams.WRAP_CONTENT);
lp.leftMargin= 10;
lp.rightMargin= 10;
viewHolder.messageTextView.setText(message.getMessage());
if (senderUid.equals(myUid)){
lp.gravity= Gravity.RIGHT;
viewHolder.linearLayout.setLayoutParams(lp);
Glide.with(OneToOneConversationActivity.this).load(myPhotoURL).into(viewHolder.messengerImageView);
viewHolder.messengerTextView.setText(myName);
}
else if(senderUid.equals(clientUid)){
lp.gravity= Gravity.LEFT;
viewHolder.linearLayout.setLayoutParams(lp);
viewHolder.messengerTextView.setText(clientName);
}
}
};
MessageViewHolder class:
public static class MessageViewHolder extends RecyclerView.ViewHolder {
public TextView messageTextView;
public TextView messengerTextView;
public CircleImageView messengerImageView;
public LinearLayout linearLayout;
public MessageViewHolder(View v) {
super(v);
messageTextView = (TextView) itemView.findViewById(R.id.messageTextView);
messengerTextView = (TextView) itemView.findViewById(R.id.messengerTextView);
messengerImageView = (CircleImageView) itemView.findViewById(R.id.messengerImageView);
linearLayout= (LinearLayout) itemView.findViewById(R.id.llOneToOneChat);
}
}
linearlayout 和 textViews 工作正常,但 CircleImageView 除外。似乎 context: OneToOneChatActivity.this 当我使用 code : Glide.with(....) 是错误的,但我想不出解决方案。
我怎样才能让它工作 属性?
我发现了我的问题。有两种方法可以解决问题
- 一个:
在 post 中使用解决方案:
所以在这种post的情况下,在"else"的情况下,可以给imageView设置一个透明色来避免这个问题
- 两个:
您可以使用两个库来加载这些图像,例如:Glide 和 Piccaso。
我使用 FirebaseRecycleAdapter 从 Firebase RealtimeDatabase 加载聊天数据。 我想以两种方式显示消息,所以左图与右图不同。
但图片有时会像图片一样错位。
这是我的代码:
mFirebaseAdapter = new FirebaseRecyclerAdapter<Message, MessageViewHolder>(
Message.class,
R.layout.item_message_onetoone,
MessageViewHolder.class,
databaseReference.child(Constant.CHILD_CHATONETOONE).child(myUid).child(clientUid)) {
@Override
protected void populateViewHolder(MessageViewHolder viewHolder, Message message, int position) {
String senderUid= message.getSenderUid();
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(RecyclerView.LayoutParams.WRAP_CONTENT, ActionBar.LayoutParams.WRAP_CONTENT);
lp.leftMargin= 10;
lp.rightMargin= 10;
viewHolder.messageTextView.setText(message.getMessage());
if (senderUid.equals(myUid)){
lp.gravity= Gravity.RIGHT;
viewHolder.linearLayout.setLayoutParams(lp);
Glide.with(OneToOneConversationActivity.this).load(myPhotoURL).into(viewHolder.messengerImageView);
viewHolder.messengerTextView.setText(myName);
}
else if(senderUid.equals(clientUid)){
lp.gravity= Gravity.LEFT;
viewHolder.linearLayout.setLayoutParams(lp);
viewHolder.messengerTextView.setText(clientName);
}
}
};
MessageViewHolder class:
public static class MessageViewHolder extends RecyclerView.ViewHolder {
public TextView messageTextView;
public TextView messengerTextView;
public CircleImageView messengerImageView;
public LinearLayout linearLayout;
public MessageViewHolder(View v) {
super(v);
messageTextView = (TextView) itemView.findViewById(R.id.messageTextView);
messengerTextView = (TextView) itemView.findViewById(R.id.messengerTextView);
messengerImageView = (CircleImageView) itemView.findViewById(R.id.messengerImageView);
linearLayout= (LinearLayout) itemView.findViewById(R.id.llOneToOneChat);
}
}
linearlayout 和 textViews 工作正常,但 CircleImageView 除外。似乎 context: OneToOneChatActivity.this 当我使用 code : Glide.with(....) 是错误的,但我想不出解决方案。 我怎样才能让它工作 属性?
我发现了我的问题。有两种方法可以解决问题
- 一个:
在 post 中使用解决方案:
所以在这种post的情况下,在"else"的情况下,可以给imageView设置一个透明色来避免这个问题
- 两个: 您可以使用两个库来加载这些图像,例如:Glide 和 Piccaso。