标题翻译
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.
My Adapter Class:
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(@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());
}
}
}
});
专注分享java语言的经验与见解,让所有开发者获益!
评论