如何将 Firestore 文档 ID 获取到 RecyclerView 适配器中?

huangapple 未分类评论51阅读模式
标题翻译

How to get firestore document ID into a RecyclerView adapter?

问题

以下是您要翻译的内容:

我想在 RecyclerView 适配器中调用 Firestore 文档 ID,但不知道如何做。有人可以帮忙解决吗?实际上,我想在我的应用程序中使用 Paper DB 添加 FAB(浮动操作按钮)功能。因此,我希望它将使用文档 ID 进行,因为每个文档的 ID 都是唯一的。但是我不知道如何在适配器类中获取文档 ID,以便我可以使用它。

Firestore 结构图像。

(图片已省略)

我的适配器类:

public class CitiesAdapter extends RecyclerView.Adapter<CitiesAdapter.ViewHolder> {

    public List<Cities> citiesList;

    public CitiesAdapter(Context context, List<Cities> citiesList) {
        this.citiesList = citiesList;
    }

    @Override
    public int getItemCount() {
        return citiesList.size();
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View citiesView = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_cities_you_must_visit, parent, false);
        return new ViewHolder(citiesView);
    }

    @Override
    public void onBindViewHolder(final CitiesAdapter.ViewHolder holder, final int position) {
        holder.vCityName.setText(citiesList.get(position).getmCityName() + ",");
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        public TextView vCityName;
        View CityView;

        public ViewHolder(View itemView) {
            super(itemView);
            CityView = itemView;
            vCityName = CityView.findViewById(R.id.lCityName);
        }
    }
}

主页碎片(Home Fragment):

mFirestore.collection("Cities").addSnapshotListener(new EventListener<QuerySnapshot>() {
    @Override
    public void onEvent(@Nullable QuerySnapshot documentSnapshots, @Nullable FirebaseFirestoreException e) {
        if (e != null) {
            // 错误处理
        }

        assert documentSnapshots != null;

        for (DocumentChange doc : documentSnapshots.getDocumentChanges()) {
            if (doc.getType() == DocumentChange.Type.ADDED) {
                String doc_id = doc.getDocument().getId();
                Cities city = doc.getDocument().toObject(Cities.class).withDocId(doc_id);
                cities.add(doc.getNewIndex(), city);
                citiesAdapter.notifyDataSetChanged();
            } else if (doc.getType() == DocumentChange.Type.MODIFIED) {
                String docID = doc.getDocument().getId();
                Cities changedModel = doc.getDocument().toObject(Cities.class).withDocId(docID);
                if (doc.getOldIndex() == doc.getNewIndex()) {
                    // 项目更改但仍保持在相同的位置
                    cities.set(doc.getOldIndex(), changedModel);
                    citiesAdapter.notifyItemChanged(doc.getOldIndex());
                } else {
                    // 项目更改并改变了位置
                    cities.remove(doc.getOldIndex());
                    cities.add(doc.getNewIndex(), changedModel);
                    citiesAdapter.notifyItemMoved(doc.getOldIndex(), doc.getNewIndex());
                }
            } else if (doc.getType() == DocumentChange.Type.REMOVED) {
                // 移除项目
                cities.remove(doc.getOldIndex());
                citiesAdapter.notifyItemRemoved(doc.getOldIndex());
            }
        }
    }
});

(翻译完毕)

英文翻译

I want to call firestore document ID into RecyclerView adapter. but not getting it how to do it. can someone help in relate to it. actually I want to add to fab functionality in my app using paper DB. so I want that it will take place using document ID because it's unique for every document. but not getting how to get document ID into adapter class so that I can use it.

Firestore Structure Image.

如何将 Firestore 文档 ID 获取到 RecyclerView 适配器中?

My Adapter Class:

public class CitiesAdapter extends RecyclerView.Adapter&lt;CitiesAdapter.ViewHolder&gt; {

    public List&lt;Cities&gt; citiesList;

    public CitiesAdapter(Context context, List&lt;Cities&gt; citiesList) {
        this.citiesList = citiesList;
    }

    @Override
    public int getItemCount() {
        return citiesList.size();
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View citiesView = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_cities_you_must_visit, parent, false);
        return new ViewHolder(citiesView);
    }

    @Override
    public void onBindViewHolder(final CitiesAdapter.ViewHolder holder, final int position) {

            holder.vCityName.setText(citiesList.get(position).getmCityName() + &quot;,&quot;);
       
    public class ViewHolder extends RecyclerView.ViewHolder {

        public TextView vCityName;
        
        View CityView;


        public ViewHolder(View itemView) {
            super(itemView);
            CityView = itemView;

            vCityName = CityView.findViewById(R.id.lCityName);
            
        }
    }

}

Home Fragment:

mFirestore.collection(&quot;Cities&quot;).addSnapshotListener(new EventListener&lt;QuerySnapshot&gt;() {
            @Override
            public void onEvent(@javax.annotation.Nullable QuerySnapshot documentSnapshots, @javax.annotation.Nullable FirebaseFirestoreException e) {
                if (e != null) {
                }

                assert documentSnapshots != null;


                for (DocumentChange doc : documentSnapshots.getDocumentChanges()) {

                    if (doc.getType() == DocumentChange.Type.ADDED) {
                        String doc_id = doc.getDocument().getId();
                        Cities city = doc.getDocument().toObject(Cities.class).withDocId(doc_id);
                        cities.add(doc.getNewIndex(), city);
                        citiesAdapter.notifyDataSetChanged();

                    } else if (doc.getType() == DocumentChange.Type.MODIFIED) {
                        String docID = doc.getDocument().getId();
                        Cities changedModel = doc.getDocument().toObject(Cities.class).withDocId(docID);
                        if (doc.getOldIndex() == doc.getNewIndex()) {
                            // Item changed but remained in same position
                            cities.set(doc.getOldIndex(), changedModel);
                            citiesAdapter.notifyItemChanged(doc.getOldIndex());
                        } else {
                            // Item changed and changed position
                            cities.remove(doc.getOldIndex());
                            cities.add(doc.getNewIndex(), changedModel);
                            citiesAdapter.notifyItemMoved(doc.getOldIndex(), doc.getNewIndex());
                        }
                    } else if (doc.getType() == DocumentChange.Type.REMOVED) {
                        // remove
                        cities.remove(doc.getOldIndex());
                        citiesAdapter.notifyItemRemoved(doc.getOldIndex());
                    }
                }
            }
        });

huangapple
  • 本文由 发表于 2020年5月31日 00:34:35
  • 转载请务必保留本文链接:https://java.coder-hub.com/62105538.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定