#java #android #android-recyclerview
Вопрос:
Я разрабатываю действие, которое показывает сообщения пользователей, за которыми они следили. Для этого я настроил запрос так, чтобы он указывал на следующего пользователя, и извлек информацию, вставив ее в представление карты на держателе onBindViewHolder таким образом:
FirestoreRecyclerOptions<GetInfoPost> options
= new FirestoreRecyclerOptions.Builder<GetInfoPost>()
.setQuery(FirebaseFirestore.getInstance().collection("following").document(fAuth.getCurrentUser().getUid()).collection("/userFollowing").limit(1000), GetInfoPost.class)
.build();
FirestoreRecyclerAdapter<GetInfoPost, FindFriendsViewHolder> firestoreRecyclerAdapter
=new FirestoreRecyclerAdapter<GetInfoPost, FindFriendsViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull FindFriendsViewHolder findFriendsViewHolder, int i, @NonNull GetInfoPost getInfoPost) {
final String listUserId = getSnapshots().getSnapshot(i).getId();
FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
Query userPostsRef = rootRef.collection("post").document(listUserId).collection("userPosts").limit(1);
userPostsRef.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
String postID = "";
for (QueryDocumentSnapshot document : task.getResult()) {
//Toast.makeText(MainActivity.this, document.getId() "", Toast.LENGTH_SHORT).show();
postID = document.getId();
}
String finalPostID = postID;
if(finalPostID.equals("")){
return;
}
FirebaseFirestore.getInstance().collection("likes").document(finalPostID).collection("postLikes").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if(task.isSuccessful()){
int count = 0;
for (DocumentSnapshot document : task.getResult()) {
count ;
}
Log.d("TAG", count "");
findFriendsViewHolder.txtLikenmb.setText(count "");
}
}
});
Кажется, все работает, за исключением того, что, когда у пользователя, который следует за вами (или нескольких пользователей), нет поста, повторный просмотр все равно создает элемент, и чтобы не аварийно завершить работу приложения, я сделал это:
if(finalPostID.equals("")){
return;
}
Но я бы не хотел показывать этот пустой пост:
Итак, есть ли способ удалить элемент из просмотра вторсырья?
(Я пытался рассмотреть похожие вопросы, но все они использовали список массивов или что-то в этом роде, поэтому они мне не помогли)
Комментарии:
1. Я не думаю, что использование запросов firebase, подобных
userPostsRef.get().addOnCompleteListener
inonBindViewHolder
, является хорошим подходом, потому что это позволяет потреблять квоту каждый раз, когда RecyclerView перерабатывает представления, даже если они уже были извлечены ранее.2. @Zain, возможно, вы правы, но это единственный способ, который я нашел, чтобы показывать сообщения подписанных пользователей
3. @Zain вы не знаете, есть ли способ удалить элемент?