Kotlin 如何使用带Firebase实时数据库的材质搜索栏按值搜索?
Kotlin 如何以及在何处声明值以便获得结果。通过此代码,我无法获得搜索结果。因为它显示listview,但在按路径字符串搜索时。结果未显示 搜索栏出现了一些错误 我在这里分享了一张图片,如果我想通过便笺和任务或只是任务进行搜索,那么我们必须在哪里声明那个孩子。我已经声明了orderByChild,但是当我在搜索栏中搜索某个内容时,也没有任何结果。帮我解决这个问题Kotlin 如何使用带Firebase实时数据库的材质搜索栏按值搜索?,kotlin,firebase-realtime-database,searchbar,Kotlin,Firebase Realtime Database,Searchbar,Kotlin 如何以及在何处声明值以便获得结果。通过此代码,我无法获得搜索结果。因为它显示listview,但在按路径字符串搜索时。结果未显示 搜索栏出现了一些错误 我在这里分享了一张图片,如果我想通过便笺和任务或只是任务进行搜索,那么我们必须在哪里声明那个孩子。我已经声明了orderByChild,但是当我在搜索栏中搜索某个内容时,也没有任何结果。帮我解决这个问题 class ToDoOverActivity : AppCompatActivity() { lateinit va
class ToDoOverActivity : AppCompatActivity() {
lateinit var toolbar: Toolbar
lateinit var todoOver: ListView
lateinit var todoOverList: MutableList<TodoClass>
lateinit var auth: FirebaseAuth
lateinit var ref: DatabaseReference
lateinit var user: FirebaseUser
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_to_do_over)
auth = FirebaseAuth.getInstance()
user = auth.currentUser!!
todoOver = findViewById(R.id.todoOver)
todoOverList = mutableListOf()
toolbar = findViewById(R.id.toolbar)
setUpToolbar()
val searchBar = findViewById(R.id.searchBar) as MaterialSearchBar
searchBar.setHint("Search...")
searchBar.isSearchEnabled
ref = FirebaseDatabase.getInstance().getReference().child(user.uid).child("To Do Over")
ref.addValueEventListener(object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
if (snapshot!!.exists()){
todoOverList.clear()
for (h in snapshot.children){
val overTask = h.getValue(TodoClass::class.java)
todoOverList.add(overTask!!)
val adapter = TodoOverAdapter(this@ToDoOverActivity, R.layout.todo_over_layout, todoOverList)
todoOver.adapter = adapter
searchBar.addTextChangeListener(object: TextWatcher{
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
val searchText = searchBar.text.toString()
searchTask(searchText.toLowerCase())
adapter.getFilter().filter(p0)
}
override fun afterTextChanged(p0: Editable?) {
}
})
}
}
override fun onCancelled(error: DatabaseError) {
}
})
}
private fun searchTask(searchText: String){
ref.child("To Do Over").orderByChild("task").startAt(searchText)
.endAt("$searchText\uf8ff")
}
fun setUpToolbar(){
setSupportActionBar(toolbar)
supportActionBar?.setHomeButtonEnabled(true)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
}
}
类ToDoOverActivity:AppCompatActivity(){
lateinit变量工具栏:工具栏
lateinit变量todoOver:ListView
lateinit变量todoOverList:MutableList
lateinit var auth:FirebaseAuth
lateinit var ref:数据库引用
lateinit变量用户:FirebaseUser
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_to_do_over)
auth=FirebaseAuth.getInstance()
user=auth.currentUser!!
todoOver=findViewById(R.id.todoOver)
todoOverList=mutableListOf()
toolbar=findviewbyd(R.id.toolbar)
setUpToolbar()
val searchBar=findviewbyd(R.id.searchBar)作为材料搜索栏
searchBar.setHint(“搜索…”)
searchBar.isSearchEnabled
ref=FirebaseDatabase.getInstance().getReference().child(user.uid.child)(“重做”)
ref.addValueEventListener(对象:ValueEventListener{
覆盖数据更改(快照:DataSnapshot){
如果(快照!!.exists()){
todoOverList.clear()
for(快照中的h.children){
val overTask=h.getValue(TodoClass::class.java)
todoOverList.add(超任务!!)
val适配器=TodoOverAdapter(this@ToDoOverActivity,R.layout.todo_over_layout,todoOverList)
todoOver.adapter=适配器
addTextChangeListener(对象:TextWatcher{
重写更改前的乐趣(p0:CharSequence?,p1:Int,p2:Int,p3:Int){
}
重写有趣的文本更改(p0:CharSequence?,p1:Int,p2:Int,p3:Int){
val searchText=searchBar.text.toString()
searchTask(searchText.toLowerCase())
adapter.getFilter().filter(p0)
}
覆盖后文本更改(p0:可编辑?){
}
})
}
}
覆盖已取消(错误:DatabaseError){
}
})
}
私人趣味搜索任务(搜索文本:字符串){
ref.child(“完成”).orderByChild(“任务”).startAt(搜索文本)
.endAt(“$searchText\uf8ff”)
}
乐趣设置工具栏(){
设置支持操作栏(工具栏)
supportActionBar?.setHomeButtonEnabled(真)
supportActionBar?.setDisplayHomeAsUpEnabled(真)
}
}
尝试用连字符或CamelCase分隔firebase中的“要做的事情”。
那就是“重来一遍”或“重来一遍”"。其目的是使其成为一个单词并消除空格。数据是从Firebase异步读取的,因此需要结果的任何代码都需要位于
onDataChange
中或从tere调用。有关示例和更多信息,请参阅。我已编辑了该问题。请看一看,我看到您对搜索文本所做的一切都是ref.child(“To Do Over”).orderByChild(“task”).startAt(searchText).endAt($searchText\uf8ff”)
。这会创建一个查询,但在将侦听器附加到该查询之前,不会读取任何内容(就像您已经使用addValueEventListener
所做的那样).你能告诉我我要做什么,给哪个听众打电话,以及在里面声明什么吗。