使用FirestoreRecyclerAdapter时如何获取Firestore文档ID?

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.