Sha*_*ron 7 android firebase recycler-adapter google-cloud-firestore
我正在使用Firestore存储一组"图表".我需要查询集合以获取具有登录用户ID的所有图表.我有一个FirebaseRecyclerAdapter,它显示了相应的图表(查询通过FirestoreRecyclerOptions传递).
但是,我需要访问每个图表的文档密钥,我无法弄清楚如何获取该信息.理想情况下,我想在从数据库中检索图表时将其设置为图表模型中的变量,但"地图"似乎没有提供将文档键映射到模型中的值的方法.如果不可能这样做,那么另一种解决方案就像在BindViewHolder中检索它并将其存储在一个不可见的视图中以便以后阅读.
在我的主要活动中,我有:
FirestoreRecyclerOptions<Chart> recyclerOptions = new FirestoreRecyclerOptions.Builder<Chart>()
.setQuery(mChartsQuery, Chart.class)
.build();
mAdapter = new ChartListAdapter(recyclerOptions, this.getActivity());
Run Code Online (Sandbox Code Playgroud)
其中mChartsQuery获取具有特定用户ID的图表.
像这样创建一个图表(用户已在表单字段中输入'nameString'):
Map<String, Object> newChart = new HashMap<>();
newChart.put("uid", userId);
newChart.put("name", nameString);
mDatabase.collection("charts")
.add(newChart)
.addOnSuccessListener(new OnSuccessListener<DocumentReference>() {...});
Run Code Online (Sandbox Code Playgroud)
我的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);
}
}
Run Code Online (Sandbox Code Playgroud)
所以,我需要能够在onBindViewHolder中检索文档ID.我找到了一个可以使用的解决方案,getSnapshots().get(position).getKey();
但getSnapshots().get(position)只是检索了一个没有设置密钥的图表.
Sha*_*ron 10
找到了解决方案......在我使用的onBindViewHolder上
getSnapshots().get(position).getKey();
Run Code Online (Sandbox Code Playgroud)
但应该是
getSnapshots().getSnapshot(position).getId();
Run Code Online (Sandbox Code Playgroud)
正确的版本工作正常,并获取文档ID.
| 归档时间: |
|
| 查看次数: |
634 次 |
| 最近记录: |