Я создаю функциональность чата в приложении. Сообщения, отправленные пользователем, будут справа, а сообщения, полученные пользователем, - в левой части экрана. Все данные чата хранятся в виде pojo. В методе FirebaseRecycler#getItemViewType()
я хочу сравнить UID текущего элемента / pojo с mFirebaseUser.getUid()
и назначить макет соответственно.
Как получить доступ к элементу в getItemViewType()
?
сообщение pojo
public class message {
private String id;
private String text;
private String name;
private String photoUrl;
private String imageUrl;
private String uid;
public message() {
}
public message(String text, String name, String photoUrl, String imageUrl, String uid) {
this.text = text;
this.name = name;
this.photoUrl = photoUrl;
this.imageUrl = imageUrl;
this.uid = uid;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public void setText(String text) {
this.text = text;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhotoUrl() {
return photoUrl;
}
public String getText() {
return text;
}
public void setPhotoUrl(String photoUrl) {
this.photoUrl = photoUrl;
}
public String getImageUrl() {
return imageUrl;
}
public void setImageUrl(String imageUrl) {
this.imageUrl = imageUrl;
}
public void setUid(String uid) {
this.uid = uid;
}
public String getUid() {
return uid;
}
}
Метод FirebaseRecyler.
private void getMessages() {
final int VIEW_TYPE_MESSAGE_SENT = 1;
final int VIEW_TYPE_MESSAGE_RECEIVED = 2;
FirebaseRecyclerOptions<message> options =
new FirebaseRecyclerOptions.Builder<message>()
.setQuery(messagesRef, parser)
.build();
mFirebaseAdapter = new FirebaseRecyclerAdapter<message, RecyclerView.ViewHolder>(options) {
@Override
public int getItemViewType(int position) {
if (mFirebaseUser.getUid() == ?) {
// If the current user is the sender of the message
// Based on the UID associated with the message and current UID
return VIEW_TYPE_MESSAGE_SENT;
} else {
// If some other user sent the message
return VIEW_TYPE_MESSAGE_RECEIVED;
}
}
@Override
@NonNull
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
if(viewType == VIEW_TYPE_MESSAGE_SENT) {
LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
return new SentMessageViewHolder(inflater.inflate(R.layout.sent_item_message, viewGroup, false));
} else if(viewType == VIEW_TYPE_MESSAGE_RECEIVED) {
LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
return new MessageViewHolder(inflater.inflate(R.layout.item_message, viewGroup, false));
}
return null;
}
@Override
protected void onBindViewHolder(RecyclerView.ViewHolder viewHolder,
int position,
@NonNull message friendlyMessage) {
mProgressBar.setVisibility(ProgressBar.INVISIBLE);
switch (viewHolder.getItemViewType()) {
case VIEW_TYPE_MESSAGE_RECEIVED:
((MessageViewHolder) viewHolder).bind(friendlyMessage);
break;
case VIEW_TYPE_MESSAGE_SENT:
((SentMessageViewHolder) viewHolder).bind(friendlyMessage);
break;
}
}
};
mFirebaseAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
....
});
}