我使用的是firebase API。發送和檢索消息。但是,我在嘗試爲發送者/提取器設置佈局時遇到問題,所以消息將左對齊。目前,我只有一個佈局,發件人/提交者正在使用,但不知道如何設置不同的佈局。左右對齊消息
public class MessageAdapter extends RecyclerView.Adapter<MessageViewHolder> {
private List<Message> messagesList;
private DatabaseReference databaseReference;
private DatabaseReference userDatabaseRef;
private FirebaseAuth firebaseAuth;
private Context context;
private String imageUrl;
public MessageAdapter(List<Message> messagesList) {
this.messagesList = messagesList;
}
@Override
public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Message c = messagesList.get(viewType);
String sender = c.getFrom();
databaseReference = FirebaseDatabase.getInstance().getReference().child("Users").child(sender);
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.messages_layout, parent, false);
return new MessageViewHolder(v);
}
@Override
public void onBindViewHolder(final MessageViewHolder viewHolder, final int index) {
final Message c = messagesList.get(index);
final String sender = c.getFrom();
databaseReference = FirebaseDatabase.getInstance().getReference().child("Users").child(sender);
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
imageUrl = dataSnapshot.child("image").getValue(String.class);
viewHolder.setUserimage(context,imageUrl);
String name = dataSnapshot.child("name").getValue().toString();
viewHolder.displayName.setText(name);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
viewHolder.messageText.setText(c.getMessage());
viewHolder.time.setText(EpochtimeToDateAndTimeString(c.getTime()));
}
@Override
public int getItemCount() {
return messagesList.size();
}
public String EpochtimeToDateAndTimeString(long time) {
Date date = new Date(time);
DateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
format.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));
String formatted = format.format(date);
return formatted;
}
}
MessageViewHolder
public class MessageViewHolder extends RecyclerView.ViewHolder {
public TextView messageText;
public TextView displayName;
public TextView time;
public ImageView showImage;
public MessageViewHolder(View view) {
super(view);
messageText = (TextView) view.findViewById(R.id.messagetext);
displayName = (TextView) view.findViewById(R.id.displayname);
time = (TextView) view.findViewById(R.id.timestamp);
showImage = (ImageView) view.findViewById(R.id.imageview_post_userimage3);
}
感謝您的回答。你能幫我確定是否左或右的邏輯,請 –
也不知道getItemViewtype被調用的地方? –
'getItemViewType'被適配器調用。確定m是左還是右的邏輯將取決於「消息」對象。從上面的代碼中,您可以將'm.getSender()'與當前用戶進行比較?可能類似於:'return m.getSender()。equals(currentUser.name())? INCOMING:OUTGOING;' – morenoadan22