Как я вижу в вашем коде, вы получаете список Task
объектов, но не получаете ключ каждого документа. Чтобы решить эту проблему, вам необходимо отслеживать ключи и значения документов в вашем адаптере. Рекомендуемый способ сделать это - сохранить два списка, один с ключами, а другой со значениями.
Итак, сначала вы добавляете List<String>
для ключей в вашем классе адаптера следующим образом:
private List<Task> taskList;
private List<String> keys;
А затем измените конструктор, чтобы он принимал оба списка:
public AvailableTaskListAdapter(List<Task> taskList, List<String> keys, Context mContext, FirebaseFirestore firestore) {
// ^^^^
this.taskList = taskList;
this.keys = keys; //Intialize the the second list
this.mActivity = (Activity) mContext;
this.firestore = firestore;
}
Затем, когда вы создаете новый объект вашего класса AvailableTaskListAdapter
, рядом с taskList
, передайте также список keys
.
AvailableTaskListAdapter adapter = new AvailableTaskListAdapter(taskList, keys, mContext, firestore);
Как правило, список ключей создается так же, как вы создаете список значений. Поэтому, когда вы перебираете коллекцию в цикле для создания списка Task
объекта, получите также идентификатор, подобный этому:
FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference tasksRef = rootRef.collection("tasks");
tasksRef.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
List<Task> taskList = new ArrayList<>();
List<String> keys = new ArrayList<>();
for (QueryDocumentSnapshot document : task.getResult()) {
Task t = document.toObject(Task.class);
taskList.add(t);
String key = document.getId();
keys.add(key);
}
//Create/notify the adapter
}
}
});