Ich verwende die Firebase-API. Nachrichten senden und abrufen. Jedoch habe ich Probleme beim Versuch Layout für den Sender/Retriever so zu setzen, dass Nachrichten links/rechts ausgerichtet werden. Im Moment habe ich nur ein Layout, das sowohl der Sender/Retriever verwendet, aber nicht sicher ist, wie man verschiedene Layouts einstellt.Nachrichten nach links/rechts ausrichten
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);
}
Vielen Dank für Ihre Antwort. Können Sie mir mit Logik helfen zu bestimmen, ob m links oder rechts ist bitte –
auch ich bin nicht sicher, wo getItemViewtype aufgerufen wird? –
'getItemViewType' wird vom Adapter aufgerufen. Die Logik zum Bestimmen, ob m links oder rechts ist, hängt von dem "Nachricht" -Objekt ab. Von Ihrem Code oben haben Sie 'm.getSender()', das Sie mit dem gegenwärtigen Benutzer vergleichen konnten? Vielleicht etwas wie: 'return m.getSender(). Equals (currentUser.name())? INCOMING: OUTGOING; ' – morenoadan22