В окне поиска не отображаются результаты ввода первых трех букв - PullRequest
0 голосов
/ 12 апреля 2020

Я разрабатываю проект android для приложения Food Ordering App, и в нем я сделал вид поиска для поиска продуктов, чтобы пользователь мог искать продукт, и главная проблема заключается в том, что когда я что-то набираю в Search View Bur для 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 буквы названия еды. Заранее спасибо Пожалуйста, помогите мне, ребята! :):)

1 Ответ

0 голосов
/ 12 апреля 2020

Попробуйте это

fStore.collection("HotBox Admin").collection("F0y2F2SeaoWHjY7sIHFr4JRf1HF2").collection("Breakfast");
                foodRef.whereArrayContains("foodname", "yourQuery").get();
...