因此,我想使FirebaseListAdapter
顯示自動填充建議,因爲在用戶鍵入至少X(在我的情況下爲1)個字符之後。FirebaseListAdapter忽略orderByChild()和equalTo()
val mSearchSuggestionsListView = findViewById(R.id.main_list_view) as ListView
var suggestionAdapter: FirebaseSuggestionAdapter? = null
mSearchEditText.editText.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(editable: Editable) {
if (editable.length > 1) {
...
createNewSuggestionAutoComplete(editable.toString().toLowerCase())
...
} else {
mSearchSuggestionsListView.adapter = null
}
}
...
//Other overrides trimmed
})
fun createNewSuggestionAutoComplete(query: String) {
val ref = FirebaseDatabase.getInstance().getReference("myModels")
.orderByChild("name").equalTo(query).ref
suggestionAdapter = FirebaseSuggestionAdapter(ref)
...
mSearchSuggestionsListView.adapter = suggestionAdapter
...
}
inner class FirebaseSuggestionAdapter(ref: DatabaseReference) :
FirebaseListAdapter<MyModel>([email protected], MyModel::class.java, android.R.layout.simple_list_item_1, ref) {
override fun populateView(v: View, model: MyModel, position: Int) {
v.findViewById<TextView>(android.R.id.text1).text = model.name
}
}
而這裏的MyModel
類:
class MyModel(var name: String)
這裏的數據在實時數據庫:
-myModels
--0
---name: "beef"
--1
---name: "vegetable"
--2
---name: "bean"
下面是對上述數據庫中的火力指數規則:
{
"rules": {
"myModels": {
".indexOn": ["name"]
},
}
}
不管怎麼說,結果,在輸入> 1個字符後,不管字符是什麼,總是像這樣(按照這個順序)。
beef
vegetable
bean
(我所說的「不管」的意思,當然包括每個以下字符串:「牛肉」,「蔬菜」,或「豆」(1個字在時間),甚至是無稽之談滿貫-the鍵盤組合,如「igiviibbi」)
PS裏有一些代碼,我修整縮短片段,如:
- 延遲到每個輸入後顯示的建議,以防止過度的呼叫。
suggestionAdapter.cleanup()
通話開始前在createNewSuggestionAutoComplete()
P.S.S其他細節創建它的一個新的實例。
- 我用
MyModel
,而不是一個單純的String
的原因是因爲我想添加一些其他領域也是如此。 - 我試過
startAt()
以及上面代碼中的equalTo()
,但它們都顯示完全相同的問題/結果。 - 以上代碼的Btw寫在Kotlin。但我認爲這不是造成這個問題的原因。
任何關於如何正確顯示數據的建議爲FirebaseQuery
在ref
中指定?