java - 如何使 Fire Store 中的 Documents 显示在 Array Adapter 中?
问题描述
我正在制作一个可以在 Firestore 中插入数据的应用程序。每个数据都有不同的文档名称,如何获取要插入到数组适配器中的文档名称?你能给我一些例子吗?这是我的简单阵列适配器代码和我的 Fire Store 的图片。
解决方案
使用 ArrayAdapter 在 ListView 中显示地名的最简单解决方案是创建对“Marker PLaces”的引用:
FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference placesRef = rootRef.collection("Marker PLaces");
假设您的 .XML 文件中已经有一个“ListView”,如下所示:
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/place_list"/>
创建一个地方类:
class Place() {
private String latitude, longitude, placeName;
private Date timestamp;
public Place() {}
public Place(String latitude, String longitude, String placeName) {
this.latitude = latitude;
this.longitude = longitude;
this.placeName = placeName
}
public String getLatitude() {
return latitude;
}
public String getLongitude() {
return longitude;
}
public String getPlaceName() {
return placeName;
}
}
然后定义适配器类:
public class PlacesAdapter extends ArrayAdapter<Place> {
public PlacesAdapter(Context context, List<Place> list) {
super(context, 0, list);
}
@NonNull
@Override
public View getView(int position, View listItemView, @NonNull ViewGroup parent) {
if (listItemView == null) {
listItemView = LayoutInflater.from(getContext()).inflate(android.R.layout.simple_list_item_1, parent, false);
}
Place place = getItem(position);
String placeName = place.getPlaceName();
((TextView) listItemView).setText(placeName);
return listItemView;
}
}
然后在您的onCreate()
方法中使用以下代码:
List<Place> placeList = new ArrayList<>();
ListView mListView = (ListView) findViewById(R.id.place_list);
PlacesAdapter placesAdapter = new PlacesAdapter(getApplicationContext(), placeList);
mListView.setAdapter(placesAdapter);
之后,获取数据并通知适配器有关更改:
placesRef.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (DocumentSnapshot document : task.getResult()) {
Place place = document.toObject(Place.class);
placeList.add(place);
}
placesAdapter.notifyDataSetChanged();
}
}
});
此代码的结果将是充满地名的 ListView。
推荐阅读
- sql - SQL Server - 不存在数据的完整结果
- android - 如何在 Android 中使用折线显示轨道路线
- node.js - nodemon - 由于更改而重新启动......永远不会重新启动
- scala - 如何使用 JohnSnowLabs NLP 拼写校正模块 NorvigSweetingModel?
- java - 为什么 JIT 在启动时会编译一些方法?
- circleci - 如果提交消息包含 [ci skip],如何在主分支上强制循环 ci 构建?
- appium - Appium - Driver.source() 显示 android 主页,即使屏幕上有应用程序
- python - Python - Django - 修改序列化程序中的字段
- mongodb - Mongo 查询以从集合中获取选择性字段
- symfony - 匹配原则扩展配置