Я работаю над сеансом комментариев в приложении android, используя модель с FirestoreRecyclerAdapter. Комментарии хранятся в Firestore, и я использую модель и адаптер для отображения текста комментариев, который хранится в text_review. Вот моя модель:
public class Comment {
float fireness_rating;
String post_id;
String review_time;
String receiver_id;
String text_review;
public Comment(){
//empty const needed.
}
Comment(float fireness_rating, String post_id, String review_time, String receiver_id, String text_review){
this.fireness_rating=fireness_rating;
this.post_id=post_id;
this.review_time=review_time;
this.receiver_id=receiver_id;
this.text_review=text_review;
}
public float getFireness_rating() {
return fireness_rating;
}
public String getPost_id() {
return post_id;
}
public String getReview_time() {
return review_time;
}
public String getReceiver_id() {
return receiver_id;
}
public String getText_review() {
return text_review;
}
}
Модель содержит пять элементов, но я в основном сосредоточен на text_review. Если у пользователя есть текстовые комментарии внутри, text_review будет содержать текст, который пользователи вводят и сохраняют в firestore. Это структура firestore после комментариев пользователя с text_review.
Как я уже упоминал, если внутри нет фактического текстового комментария, text_review должен быть пустым . Я создал адаптер для рекурсии всего списка комментариев, отображаемых на страницах моих действий. Вот мой адаптер.
public class Comment_Adapter extends FirestoreRecyclerAdapter<Comment, Comment_Adapter.CommentHolder> {
public Comment_Adapter(@NonNull FirestoreRecyclerOptions<Comment> options){
super(options);
}
@Override
protected void onBindViewHolder(@NonNull final CommentHolder holder, int i, @NonNull Comment model) {
final String commented_userid = model.getReceiver_id();
Log.d("comment_adapter_debug", commented_userid);
//shown only if the use has comment which in text_review
Query q = FirebaseFirestore.getInstance().collection("user_reviews").document(commented_userid).collection("fairness").whereGreaterThan("text_review", "");
q.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
Log.d("comment_adapter_debug", "has comment inside x");
//retrieve info, you can ignore this part. FirebaseFirestore.getInstance().collection("users").document(commented_userid).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
String first_name = document.get("first_name").toString();
String last_name = document.get("last_name").toString();
String username = document.get("username").toString();
Log.d("comment_adapter_debug", first_name + " " + last_name + ": w/ username= " + username);
holder.CommentedFullName.setText(first_name + " " + last_name);
holder.CommentedUser.setText("@" + username);
} else {
Log.d("comment_adapter_debug", "no comment yet for this user.");
}
}
});
}
});
String oldstring = model.getReview_time();
Date dt = new Date(oldstring);
String timeStamp = new SimpleDateFormat("MMM dd, yyyy").format(dt);
holder.CommentedDate.setText(timeStamp);
holder.Comment.setText(model.getText_review());
}
@NonNull
@Override
public CommentHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_comment, parent, false);
return new CommentHolder(v);
}
class CommentHolder extends RecyclerView.ViewHolder{
private ImageView CommentedIcon;
private TextView CommentedFullName;
private TextView CommentedUser;
private TextView CommentedDate;
private TextView Comment;
public CommentHolder(View itemView){
super(itemView);
CommentedIcon = itemView.findViewById(R.id.commented_icon);
CommentedFullName = itemView.findViewById(R.id.commented_fullname);
CommentedUser = itemView.findViewById(R.id.commented_user);
CommentedDate = itemView.findViewById(R.id.commented_date);
Comment = itemView.findViewById(R.id.commented);
}
}
}
и это изображение
Все, что я хочу, - это показать, что есть настоящий комментарий («ааа» из pi c), а красный кружок не должен отображаться, так как комментариев не существует ("text_review" == ""). Мой подход состоит в том, чтобы сделать запрос whereGreaterThan ("text_review", ""), что означает проверить, содержит ли text_review текст. Если да, покажите список, иначе пропустите весь список. Я знаю, что это немного длинновато, но любая помощь будет признательна