我有一個 Firestore 專案,用戶可以在其中添加一個新專案,并且在添加新專案后,應將其添加到我的搜索視圖的自動完成 TextView 的建議串列中。
但是,每當我添加新專案時,這些建議都不會更新。
這是我的片段:
val searchView = binding.toolbar.searchView
val productsRef = Firebase.firestore.collection("products")
val productList = mutableListOf<String>()
//get all products name in firebase
productsRef.get()
.addOnSuccessListener { documents ->
for(document in documents){
productList.add(document["name"].toString())
}
}
val arrayAdapter = ArrayAdapter(this, android.R.layout.simple_dropdown_item_1line, productList)
val autoComplete = searchView.findViewById<AutoCompleteTextView>(R.id.search_src_text)
autoComplete.setAdapter(arrayAdapter)
每當我的集合發生變化時,特別是在添加新專案/檔案時,是否有某種方式可以再次運行此代碼?
編輯:當我嘗試搜索時,該串列似乎不包括我新添加的專案。但是當我關閉我的應用程式并搜索我添加的專案時,它就會出現。我打算做的是在我嘗試添加新專案時同步串列,這樣我就不必關閉我的應用程式就可以在搜索視圖的建議框中看到它。
謝謝!
uj5u.com熱心網友回復:
根據您的評論:
我想問題是我在 onCreate 方法上呼叫此代碼,該方法僅在應用程式啟動時運行一次。當我嘗試轉到添加新專案的新活動時,上述代碼不再運行。這可能是我的陣列不包含新添加的檔案的原因,因為此代碼段僅運行一次。
這是預期的行為,因為您使用的是Query#get()呼叫,該呼叫僅:
執行查詢并將結果作為 QuerySnapshot 回傳。
這意味著它只精確地獲取一次資料。
是否有 Firestore 方法可以偵聽任何更改?
如果您想監聽“產品”集合中發生的實時更新,那么您應該考慮使用Query#addSnapshotListener(),它:
使用活動范圍的偵聽器開始偵聽此查詢。
如官方檔案中所述:
- 收聽集合中的多個檔案
另請注意,還有一個名為Firebase-UI for Android的庫,它可以幫助您準確實作您想要的。
uj5u.com熱心網友回復:
當資料準備好呈現時,您需要通知(需要在 UI 執行緒上運行):
autoComplete.getAdapter().notifyDataSetChanged()
...并繼續使用相同的配接器,而不是一遍又一遍地分配新的配接器。
顯然,這productList需要妥善維護。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/324536.html
標籤:安卓 火力基地 科特林 谷歌云firestore
