Я использую Firestore для хранения коллекции «диаграмм». Мне нужно запросить коллекцию, чтобы получить все графики с идентификатором вошедшего в систему пользователя. У меня есть FirebaseRecyclerAdapter, который показывает соответствующие диаграммы (запрос передается через FirestoreRecyclerOptions).
Однако мне нужен доступ к ключу документа для каждой диаграммы, и я не могу понять, как получить эту информацию. В идеале я хотел бы установить его в качестве переменной в модели диаграммы, как только диаграмма будет извлечена из базы данных, но «карта», по-видимому, не обеспечивает способ сопоставления ключа документа со значением в модели. , Если это невозможно сделать, то другим решением было бы что-то вроде извлечения его в BindViewHolder и сохранения его в невидимом представлении для последующего чтения.
В своей основной деятельности я имею:
FirestoreRecyclerOptions<Chart> recyclerOptions = new FirestoreRecyclerOptions.Builder<Chart>()
.setQuery(mChartsQuery, Chart.class)
.build();
mAdapter = new ChartListAdapter(recyclerOptions, this.getActivity());
, где mChartsQuery получает диаграммы с определенным идентификатором пользователя.
Диаграмма создается следующим образом (пользователь ввел 'nameString' в поле формы):
Map<String, Object> newChart = new HashMap<>();
newChart.put("uid", userId);
newChart.put("name", nameString);
mDatabase.collection("charts")
.add(newChart)
.addOnSuccessListener(new OnSuccessListener<DocumentReference>() {...});
Мой класс ChartListAdapter:
public class ChartListAdapter
extends FirestoreRecyclerAdapter<Chart, ChartViewHolder> {
public ChartListAdapter(FirestoreRecyclerOptions recyclerOptions) {
super(recyclerOptions);
}
@Override
protected void onBindViewHolder(ChartViewHolder holder, int position, Chart model) {
// THIS IS WHERE I NEED THE DOCUMENT ID, SO I CAN
// PASS IT INTO THE INTENT AS EXTRA_CHART_KEY
// Set click listener for the chart
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getActivity(), ChartViewActivity.class);
intent.putExtra(ChartViewActivity.EXTRA_CHART_KEY, chartKey);
startActivity(intent);
}
});
// Bind Chart to ViewHolder
holder.bindToChart(model);
}
@Override
public ChartViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_chart, parent, false);
return new ChartViewHolder(view);
}
}
Итак, мне нужно иметь возможность получить идентификатор документа в onBindViewHolder. Я нашел решение, которое говорит использовать getSnapshots().get(position).getKey();
но getSnapshots().get(position)
просто получает диаграмму, в которой не установлен ключ.