在我的 Android 应用程序中,我有一个 MainActivity 作为主要基础,其中有一个标有“添加客户端详细信息”的按钮。单击此按钮后,用户应导航到名为 AddViewClientDetailsActivity 的新活动。我专注于优化应用程序的大小和可用性,因此我决定尽可能使用片段而不是活动。
在 AddViewClientDetailsActivity 中,我想在 Fill_One.java 片段中显示 TextView,而不是使用单独的片段。当用户单击“添加客户端详细信息”按钮时,此 TextView 应动态显示从 Firestore 最后插入的集合的名称。 TextView 将用作客户端 ID,我还将在其旁边合并一个图像。
现状: 单击“添加客户端详细信息”按钮后,我已成功实现到 AddViewClientDetailsActivity 的导航。但是,我在使用 Fill_One.java 片段中最后插入的集合名称动态更新 TextView 时面临挑战。
请求帮助: 我需要有关如何使用单击“添加客户端详细信息”按钮时从 Firestore 检索到的最后插入的集合名称来有效更新 Fill_One.java 片段中的 TextView 的指导。此外,如果您能提出将图像与 TextView 一起合并以进行视觉表示的建议,我们将不胜感激。
目前进展: 我已经创建了该按钮并将 Firebase Firestore 集成到我的项目中。但是,我正在努力实现检索最后插入的集合名称的功能。
代码片段(不起作用): `// 我尝试检索最后插入的集合名称的代码片段 私有无效 fetchLastInsertedCollectionName() { FirebaseFirestore db = FirebaseFirestore.getInstance();
db.collection("collection_creation_times")
.orderBy("creation_time", Query.Direction.DESCENDING)
.limit(1)
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
String lastCreatedCollectionName = document.getId();
// Now I need to set this name in a TextView in the next activity's fragment
// How can I achieve this?
}
} else {
Toast.makeText(getContext(), "Failed to fetch last inserted collection name", Toast.LENGTH_SHORT).show();
}
}
});
} `
我需要帮助在下一个活动片段的 TextView 中设置检索到的最后插入的集合名称。任何人都可以提供指导或建议实现此功能的最佳方法吗?
我尝试使用查询从 Firebase Firestore 获取最后插入的集合名称。我希望检索最后插入的集合的名称,并将其设置在下一个活动片段内的 TextView 中。然而,我在实现此功能时遇到了困难,并正在寻求帮助以实现预期的结果。
无法使用移动 SDK 列出文档的顶级集合或子集合。由于此操作不可能,因此您无法知道最后添加的是哪个集合。相反,您可以在实时数据库中添加一个包含集合列表的节点。当您在数据库中写入名称时,还要添加时间戳。要获取最后一个集合名称,请按照以下文章中的描述对元素进行降序排序:
检查您的代码,我可以肯定地告诉您,您想要知道最后添加的文档而不是最后添加的集合。如果是这种情况,那么您应该简单地在回调中设置文档 ID:
db.collection("collection_creation_times")
.orderBy("creation_time", Query.Direction.DESCENDING)
.limit(1)
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
String lastCreatedCollectionName = document.getId();
TextView tv = findViewById<TextView>(R.id.tv); //👈
tv.setText(lastCreatedCollectionName); //👈
}
} else {
Toast.makeText(getContext(), "Failed to fetch last inserted collection name", Toast.LENGTH_SHORT).show();
}
}
});
因为您将结果限制为一个,所以您将获得 TExtView 中显示的最后一个文档 ID。