如何使fire store中的文档在阵列适配器中显示?

htrmnn0y  于 2021-09-13  发布在  Java
关注(0)|答案(1)|浏览(300)

我正在制作一个可以在firestore中插入数据的应用程序。每个数据都有不同的文档名,如何将文档名插入到数组适配器中?你能给我举几个例子吗?这是我的简单阵列适配器代码和fire存储的图片。

wswtfjt7

wswtfjt71#

使用arrayadapter在listview中显示地名的最简单解决方案是创建对“标记位置”的引用:

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"/>

创建一个place类:

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中充满地名。

相关问题