У меня есть список, который загружается firestore + дооснащение. Он показывает чаты, которые не скрыты и не скрыты. Всякий раз, когда я нажимаю кнопку в представлении переработчика, чтобы скрыть или показать, представление переработчика загружает несколько удаленных элементов. Пожалуйста, помогите мне сделать эту функцию скрытия / показа правильно, чтобы эта ошибка множественной загрузки в представлении переработчика исчезла. Установка во фрагменте с viewpager. Это может выглядеть как много кода, но требуется, чтобы получить ответ. Альтернативный способ состоит в том, чтобы иметь два отдельных списка (один из скрытых и один для показа), но я пытаюсь понять, можно ли это сделать таким образом.
При загрузке фрагмента (работает нормально)
getChatListFromFireBase("0");
// Populate The Visible Chat List On Button Click
ivShow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getChatListFromFireBase("0");
}
});
// Populate The Hidden Chat List On Button Click
ivHide.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getChatListFromFireBase("1");
}
});
Функция для отображения списка в Fragement
// Get Chats List From FireStore
private void getChatListFromFireBase(String hiddenStatus) {
lIndividualChatList.clear();
lIndividualChatListIds.clear();
fbFs.collection("individual_chats").document(mySqlUserId).collection("lists").whereEqualTo("hide_status", hiddenStatus).addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(QuerySnapshot documentSnapshots, FirebaseFirestoreException e) {
if (e != null) {
}
for (DocumentChange dc : documentSnapshots.getDocumentChanges()) {
switch (dc.getType()) {
case ADDED:
key = dc.getDocument().getId();
firebaseRetrofitQuery(dc, "Added", key);
break;
case MODIFIED:
key = dc.getDocument().getId();
// Do The Change Function
firebaseRetrofitQuery(dc, "Changed", key);
break;
case REMOVED:
break;
}
}
}
});
}
Вспомогательная функция во фрагменте
// Retrofit Query
private void firebaseRetrofitQuery(DocumentChange documentChange, final String childActivityType, final String key) {
if (childActivityType.equals("Added")) {
lIndividualChatListIds.add(key);
}
// Get The Receiver Id To Get Data From Other Nodes
final String mySqlFriendUserId = documentChange.getDocument().getId();
final String hideStatus = (String) documentChange.getDocument().getData().get("hide_status");
// Use Retrofit Call
Call<JsonObject> call = RetrofitClient.getInstance().profilesGetApi().getIndividualDetails(mySqlUserId, mySqlFriendUserId);
call.enqueue(new Callback<JsonObject>() {
@Override
public void onResponse(@NonNull Call<JsonObject> call, @NonNull Response<JsonObject> response) {
JSONObject jsonObject;
try {
jsonObject = new JSONObject(new Gson().toJson(response.body()));
// Check If User Array Has Anything
JSONArray userArray = jsonObject.getJSONArray("user_array");
// Get The Json Object
JSONObject returnJSONObject = userArray.getJSONObject(0);
String name = returnJSONObject.optString("name");
if (childActivityType.equals("Added")) {
// Populate The Array List With Data From Both Nodes
lIndividualChatList.add(new IndividualListModel(name, hideStatus));
}
if (childActivityType.equals("Changed")) {
int index = lIndividualChatListIds.indexOf(key);
lIndividualChatList.set(index, new IndividualListModel(name, hideStatus));
}
// Use The Adapter To Populate The Recycler View
aIndividualChatList = new IndividualListAdapter(getContext(), lIndividualChatList, senderActivity, new IndividualListAdapter.OnItemClickListener() {
@Override
public void onItemClicked(final Map data) {
}
});
rvList.setAdapter(aIndividualChatList);
aIndividualChatList.notifyDataSetChanged();
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(@NonNull Call<JsonObject> call, @NonNull Throwable t) {
}
});
}
В адаптере вида Recycler
viewHolder.ivHide.setOnClickListener(new View.OnClickListener()
{
@Override public void onClick (View v){
fbFs.collection("individual_chats").document(mySqlUserId).collection("lists").document(individualListModel.getMysql_friend_user_id()).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document.exists()) {
String hiddenStatus = document.getString("hide_status");
if (hiddenStatus.equals("0")) {
fbFs.collection("individual_chats").document(mySqlUserId).collection("lists").document(individualListModel.getMysql_friend_user_id()).update("hide_status", "1");
}
if (hiddenStatus.equals("1")) {
fbFs.collection("individual_chats").document(mySqlUserId).collection("lists").document(individualListModel.getMysql_friend_user_id()).update("hide_status", "0");
}
}
}
}
});
});