微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何让fire store中的Documents显示在Array Adapter中?

如何解决如何让fire store中的Documents显示在Array Adapter中?

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

This is my Fire Store

This is my simple Array Adapter

解决方法

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?