I am trying to populate a recyclerview
using FirebaseRecyclerAdapter
fetching details from firebase.
Activity code is given below :-
private FirebaseRecyclerAdapter<UserChat,RecyclerView.ViewHolder> adapter;
final FirebaseRecyclerOptions<UserChat> options = new FirebaseRecyclerOptions.Builder<UserChat>()
.setQuery(queryforDisplayMessages, UserChat.class)
.setLifecycleOwner(this)
.build();
adapter=new FirebaseUserChatAdapter(options);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getBaseContext()));
mRecyclerView.setAdapter(adapter);
FirebaseAdapter Code is given below
public class FirebaseUserChatAdapter extends FirebaseRecyclerAdapter<UserChat,RecyclerView.ViewHolder> {
private static final String TAG=FirebaseUserChatAdapter.class.getSimpleName();
private static final int VIEW_TYPE_MESSAGE_SENT = 1;
private static final int VIEW_TYPE_MESSAGE_RECEIVED = 2;
/**
* Initialize a {@link RecyclerView.Adapter} that listens to a Firebase query. See
* {@link FirebaseRecyclerOptions} for configuration options.
*
* @param options
*/
public FirebaseUserChatAdapter(@NonNull FirebaseRecyclerOptions<UserChat> options) {
super(options);
}
@Override
public int getItemViewType(int position) {
UserChat message = getItem(position);
Log.d(TAG,"usermodel"+message.getUserModel().getId());
if (message.getUserModel().getId().equals("GgGwv7BzOSSoMA5ve2047Neg8aC3")) {
// If the current user is the sender of the message
return VIEW_TYPE_MESSAGE_SENT;
} else {
// If some other user sent the message
return VIEW_TYPE_MESSAGE_RECEIVED;
}
}
@Override
protected void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position, @NonNull UserChat model) {
UserChat message = getItem(position);
switch (holder.getItemViewType()){
case VIEW_TYPE_MESSAGE_SENT:
((FirebaseUserChatViewHolderSent)holder).tvSent.setText(model.getMessage());
case VIEW_TYPE_MESSAGE_RECEIVED:
((FirebaseUserChatViewHolderReceived)holder).tvReceived.setText(model.getMessage());
}
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view;
switch (viewType){
case VIEW_TYPE_MESSAGE_SENT:
view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.chat_user1_item, parent, false);
return new FirebaseUserChatViewHolderSent(view);
case VIEW_TYPE_MESSAGE_RECEIVED:
view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.chat_user2_item, parent, false);
return new FirebaseUserChatViewHolderReceived(view);
}
return null;
}
class FirebaseUserChatViewHolderSent extends RecyclerView.ViewHolder {
TextView tvSent;
public FirebaseUserChatViewHolderSent(View itemView) {
super(itemView);
tvSent=itemView.findViewById(R.id.textview_messagesent);
}
}
class FirebaseUserChatViewHolderReceived extends RecyclerView.ViewHolder {
TextView tvReceived;
public FirebaseUserChatViewHolderReceived(View itemView) {
super(itemView);
tvReceived=itemView.findViewById(R.id.textview_messagereceived);
}
}
}
Model class
package com.iworld.daxi.Model;
import java.security.Timestamp;
/**
* Created by Admin on 20/02/2018.
*/
public class UserChat {
private boolean datetimestamp;
private String message;
private String status;
private Object timeStamp;
private UserModel userModel;
public UserChat(){
}
public UserChat(boolean datetimestamp, String message, String status, Object timeStamp, UserModel userModel) {
this.datetimestamp = datetimestamp;
this.message = message;
this.status = status;
this.timeStamp = timeStamp;
this.userModel = userModel;
}
public boolean isDatetimestamp() {
return datetimestamp;
}
public void setDatetimestamp(boolean datetimestamp) {
this.datetimestamp = datetimestamp;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public Object getTimeStamp() {
return timeStamp;
}
public void setTimeStamp(Object timeStamp) {
this.timeStamp = timeStamp;
}
public UserModel getUserModel() {
return userModel;
}
public void setUserModel(UserModel userModel) {
this.userModel = userModel;
}
}
Its going to the FirebaseUserChatAdapter constructor. But no other methods are getting called. And so my recyclerview is not getting populated. Can someone help please.
Before this:
mRecyclerView.setAdapter(adapter);
add this:
adapter.startListening();
hopefully it will work.