Search View在输入前三个字母时不显示结果

问题描述 投票:0回答:1

[我正在Food Ordering App上开发一个android项目,因为我创建了用于搜索食物的搜索视图,以便用户可以搜索食物,而主要问题是,当我在Search View Bur for Burger中键入任何内容时,不显示任何结果,因为它应该像在其他应用程序中一样仅在输入前2/3个字时显示,而我需要输入Burger的完整字,然后显示相同的字,但是当用户希望在搜索视图下方显示结果时输入相应食物的一些字词

package com.example.menulayout

import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.SearchView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.firestore.FirebaseFirestore
import java.lang.StringBuilder
import java.util.*
import kotlin.collections.ArrayList

class SearchFragment : Fragment() {
    lateinit var recyclerView : RecyclerView
    lateinit var searchView : SearchView
    lateinit var foodAdapter : FoodAdapter
    private val mArrayList: ArrayList<ModelFood> = ArrayList()
    lateinit var arrayList : ArrayList<ModelFood>
    private val fStore = FirebaseFirestore.getInstance()
    private val fAuth = FirebaseAuth.getInstance()

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        // Inflate the layout for this fragment
        val retview = inflater.inflate(R.layout.fragment_search, container, false)
        return retview
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        searchView = view.findViewById(R.id.frag_search_view)
        searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener{
            override fun onQueryTextSubmit(p0: String?): Boolean {
                return true
            }
            override fun onQueryTextChange(p0: String?): Boolean {
                if(p0 == ""){
                    mArrayList.clear()
                }
                else {
                    searchFoodBreakfast(p0!!.split(' ').joinToString(" ") { it.capitalize()  })
                }
                return true
            }
        })

        recyclerView = view.findViewById(R.id.frag_search_recycler_view)
        recyclerView.setHasFixedSize(true)
        val layoutmanager = LinearLayoutManager(context)
        recyclerView.layoutManager = layoutmanager
        foodAdapter = FoodAdapter(activity!!.applicationContext, mArrayList)
        recyclerView.adapter = foodAdapter
    }

    private fun searchFoodBreakfast(s: String) {
        fStore.collection("HotBox Admin")
            .document("F0y2F2SeaoWHjY7sIHFr4JRf1HF2")
            .collection("Breakfast")
            .whereEqualTo("foodname",s)
            .addSnapshotListener { querySnapshot, firebaseFirestoreException ->
                if (firebaseFirestoreException != null) {
                    Toast.makeText(context, "No Food Found", Toast.LENGTH_LONG).show()
                }
                for (i in querySnapshot!!) {
                    val foodsearch = ModelFood(
                        i.getString("imageuri")!!,
                        i.getString("foodname")!!,
                        i.getString("foodprice")!!,
                        i.getString("foodofferprice")!!,
                        i.getString("fooddescription")!!,
                        i.getString("foodcategory")!!
                    )
                    Log.d("key", i.getString("foodname").toString())
                    mArrayList.add(foodsearch)
                }
                foodAdapter.update(mArrayList)
            }
    }

    override fun onStart() {
        super.onStart()
        (activity as AppCompatActivity).supportActionBar?.hide()
    }

    override fun onStop() {
        super.onStop()
        (activity as AppCompatActivity).supportActionBar?.show()
    }
}

FoodAdapter.kt(适配器类)

package com.example.menulayout

import android.content.Context
import android.content.Intent
import android.content.SharedPreferences
import android.graphics.Bitmap
import android.util.Log
import android.view.Display
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.*
import androidx.cardview.widget.CardView
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.firestore.FieldValue
import com.google.firebase.firestore.FirebaseFirestore
import com.google.firebase.firestore.SetOptions
import java.io.Serializable
import java.util.*
import kotlin.collections.ArrayList
import kotlin.collections.HashMap

class FoodAdapter(var con: Context, var list: ArrayList<ModelFood>) : RecyclerView.Adapter<viewHolder>() {
    private val userid = FirebaseAuth.getInstance().currentUser!!.uid.toString()

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): viewHolder {
        val layoutInflater : LayoutInflater = LayoutInflater.from(con)
        val v : View = layoutInflater.inflate(R.layout.layout_breakfast_rv, parent, false)
        return viewHolder(v)
    }

    override fun getItemCount(): Int {
        return list.size
    }

    fun update(list: ArrayList<ModelFood>) {
        this.list = list
        notifyDataSetChanged()
    }

    override fun onBindViewHolder(holder: viewHolder, position: Int) {
        val foodItem = list[position]
        Glide.with(con).load(foodItem.imageuri).centerCrop().dontAnimate().into(holder.ig_fd_image)
        holder.tv_fd_name.text = foodItem.foodname
        holder.tv_fd_price.text = foodItem.foodprice
        holder.tv_fd_offprice.text = foodItem.foodofferprice

        holder.parent_lay.setOnClickListener {
            val intent = Intent(con, ProductDetailsActivity::class.java)
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
            intent.putExtra("object",foodItem)
            con.startActivity(intent)
        }

        holder.ig_fd_cart.setOnClickListener {
            val intent = Intent(con, ProductDetailsActivity::class.java)
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
            intent.putExtra("object",foodItem)
            con.startActivity(intent)
        }

        holder.chk_add_fav.isChecked = foodItem.isLiked == 1
        holder.chk_add_fav.setOnCheckedChangeListener { compoundButton, b ->
            if(compoundButton.isPressed) {
                if (b) {
                    val uuid = UUID.randomUUID().toString()
                    val favData = HashMap<String, Any>()
                    favData["foodcategory"] = foodItem.foodcategory
                    FirebaseFirestore.getInstance().collection("HotBox")
                        .document(userid)
                        .collection("Favorites")
                        .document(foodItem.foodid)
                        .set(favData, SetOptions.merge())
                        .addOnSuccessListener {
                            Toast.makeText(con, foodItem.foodname + " added to Favorites", Toast.LENGTH_LONG).show()
                            holder.chk_add_fav.isChecked = true
                        }
                        .addOnFailureListener { e ->
                            Toast.makeText(con, "Failed to Add", Toast.LENGTH_LONG).show()
                            Log.d("Main", e.toString())
                        }
                }
                else {
                    FirebaseFirestore.getInstance().collection("HotBox")
                        .document(userid)
                        .collection("Favorites")
                        .document(foodItem.foodid)
                        .delete()
                        .addOnSuccessListener {
                            Toast.makeText(con, foodItem.foodname + " removed from Favorites", Toast.LENGTH_LONG).show()
                            holder.chk_add_fav.isChecked = false
                        }
                        .addOnFailureListener {
                            Log.d("Main", it.message.toString())
                            Toast.makeText(con, foodItem.foodname + " failed to remove from Favorites", Toast.LENGTH_LONG).show()
                        }
                }
            }
        }
    }
}

class viewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
    val parent_lay = itemView.findViewById<RelativeLayout>(R.id.parent_rel_lay)
    val ig_fd_image = itemView.findViewById<ImageView>(R.id.food_image_inside_rv)
    val chk_add_fav = itemView.findViewById<CheckBox>(R.id.favorites_add_to_fav)
    val ig_fd_cart = itemView.findViewById<ImageView>(R.id.image_view_add_to_cart_inside_rv)
    val tv_fd_name = itemView.findViewById<TextView>(R.id.txt_food_name_inside_rv)
    val tv_fd_price = itemView.findViewById<TextView>(R.id.txt_food_price_inside_rv)
    val tv_fd_offprice = itemView.findViewById<TextView>(R.id.txt_food_offer_price_inside_rv)
}

以上是我的代码,请帮助我,以便用户只需输入食物名称的前2/3个字母即可搜索食物先感谢您请帮我在那里!!! :):)

android android-fragments kotlin google-cloud-firestore searchview
1个回答
0
投票

尝试一下

fStore.collection("HotBox Admin").collection("F0y2F2SeaoWHjY7sIHFr4JRf1HF2").collection("Breakfast");
                foodRef.whereArrayContains("foodname", "yourQuery").get();
© www.soinside.com 2019 - 2024. All rights reserved.