Dav*_*vor 3 android firebase firebaseui google-cloud-firestore
我可以查询Firestore并手动获取ID,但是我正在使用FirestoreRecyclerAdapter它,因为它带来了许多额外的工作。所以,如果我有这样的代码:
FirebaseFirestore db = FirebaseFirestore.getInstance();
Query query = db.collection(COLLECTION_NAME)
.whereEqualTo("userId", USER_ID)
.limit(LIMIT);
FirestoreRecyclerOptions options = new FirestoreRecyclerOptions
.Builder<SomeEntity>()
.setQuery(query, SomeEntity.class)
.build();
FirestoreRecyclerAdapter adapter = new FirestoreRecyclerAdapter<SomeEntity, MyHolder>(options) {
@Override
public void onBindViewHolder(MyHolder holder, int position, SomeEntity model) {
// I need model ID here
}
}
Run Code Online (Sandbox Code Playgroud)
因此,如果使用FirestoreRecyclerAdapter,它将自动将SomeEntity类反序列化为model对象。这一切都很好,但现在我需要将侦听器附加到列表中,并使用模型ID做出反应。现在,如果要手动从Firestore中反序列化对象,则可以执行以下操作:
for (DocumentSnapshot document : task.getResult()) {
SomeEntity entity = document.toObject(SomeEntity.class).setId(document.getId());
list.add(entity);
}
Run Code Online (Sandbox Code Playgroud)
但是,由于FirestoreRecyclerAdapter正在为我进行反序列化,所以我不敢document.getId()自欺欺人。到我使用onBindViewHolder方法时,我再也无法访问文档ID。有没有我缺少的方法,有什么方法可以从我忽略的适配器中检索ID?
注意,我不认为将ID冗余存储为字段是一种解决方案。我宁愿继承并重写FirestoreRecyclerAdapter,但是我更愿意在没有太多工作的情况下解决这个问题。
当您需要文档ID时,您应该已经知道要处理的项目。通常,这将是项目在列表中的位置。即,当用户点击某个项目时,点击处理程序会传递给该项目的ID。如果有position,则可以使用以下方法DataSnapshot从适配器获取:
adapter.getSnapshots().getSnapshot(position);
Run Code Online (Sandbox Code Playgroud)
因此,如果要获取ID,可以使用以下方法获取:
String id = adapter.getSnapshots().getSnapshot(position).getId();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1036 次 |
| 最近记录: |