[英]How to update ListView from firebase
我正在使用firebase檢索一些數據作為字符串數組並將其顯示在列表視圖中。
問題是我將Firebase放在單獨的類中,因此我需要知道如何在MainActivity中更新列表視圖
這是我的數據庫類
public void GetAllOsr (final ArrayList<String>names){
// initialize firestore
firebaseFirestore = FirebaseFirestore.getInstance();
//Collection (osar) -> all documents
firebaseFirestore.collection("Osar").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()){
// for all documents in it get field name and store it in the arraylist
for (QueryDocumentSnapshot document : task.getResult()) {
String name = document.getString("Name");
names.add(name);
}
}
}
});
}
這是我的MainActivity
@Override
protected void onStart() {
super.onStart();
final ArrayList<String> osarName = new ArrayList<>();
dataBaseController.GetAllOsr(osarName);
ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1, osarName);
osar_list.setAdapter(adapter);
}
因此,如果它們在不同的類中,則需要某種方式來公開更新ListView
的能力。 例如,在一個類中,您可以使用“獲取器”使ListView
及其數據源對外界可見,即
public final ListView getMyListView() {
return this.mListView;
}
publc final List<String> getMyListViewDataSource() {
return this.mListViewDataSource;
}
這將允許您append
項目append
到mListViewDataSource
,完成后,在ListView
的Adapter
上調用notifyDatasetChanged()
以強制Android識別列表內容已更改。
但是,這並不理想 。 這是因為您可以在應用程序中的任何位置訪問List
的內容並任意更改List
,這會在應用程序開始增長時帶來問題。 它變得難以維護。
因此,您應該做的是在類中公開“事件”樣式的接口,即
public final void addItemsToListView(final List<String> pItems) {
// update the internal list
// refresh the list
}
由於此“隱藏”或封裝了List
的實際內容,因此您會發現您的應用程序將變得更加容易,因為圍繞該應用程序的許多分布式邏輯並不依賴於知道List
的內容是什么。 。 您只是強制實施協議 ,局外人只能加入 List
。
強制執行此類約定后,應用程序將變得更加容易/安全。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.