首页 > 解决方案 > 如何使 Fire Store 中的 Documents 显示在 Array Adapter 中?

问题描述

我正在制作一个可以在 Firestore 中插入数据的应用程序。每个数据都有不同的文档名称,如何获取要插入到数组适配器中的文档名称?你能给我一些例子吗?这是我的简单阵列适配器代码和我的 Fire Store 的图片。 这是我的火店

这是我的简单阵列适配器

标签: javaandroidfirebasegoogle-cloud-firestore

解决方案


使用 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。


推荐阅读