Skip to content

Snappy1

  • Home
  • Android
  • What
  • How
  • Is
  • Can
  • Does
  • Do
  • Why
  • Are
  • Who
  • Toggle search form

[FIXED] java – EditText is not filtering the list of RecyclerView in Android Kotlin

Posted on November 11, 2022 By

Solution 1 :

i’m not use the filter in the adapter,but i think may be u can use the list.filter and setThe NewData with the DiffUtil? although it may be not the best solution

Problem :

I am trying to filter the list in RecyclerView by EditText. In Activity, passing the response in the adapter object, which is getting from the ViewModel class. And in the adapter, the filter method is written. Overall the Search Filter from EditText is not working. Below the code is written I am not sure how can I resolve this problem.

Project having manly an Activity,Adapter, XML file, and the ViewModel class.

fragment_availabletender

This page is having EditText & RecyclerView.

         <EditText
         android_id="@+id/editMobileNo"
         android_layout_width="match_parent"
         android_layout_height="50dp"
         android_padding="0dp"
         android_background="@drawable/login_edittext"
         android_ems="10"
         android_hint="Search Tender"
         android_gravity="center"
         android_drawableLeft="@drawable/search_3_24"
         android_layout_below="@+id/tendertext"
         android_paddingLeft="50dp"
         >
       </EditText>

       <androidx.recyclerview.widget.RecyclerView
        android_id="@+id/tender_list"
        android_layout_width="match_parent"
        android_layout_height="match_parent"
        android_color="@color/cardview_light_background"
        android_padding="6dp"
        android_background="@null"
        android_scrollbars="vertical"
        android_layout_marginTop="10dp"
        android_layout_below="@+id/text1"
        app_layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
        />

Model Class
This class is having model

   data class TenderProperty(

    val id: String,
    @Json(name = "img_src") val imgSrcUrl: String,
    val type: String,
    val price: Double
    )

ViewModel
Here response is getting

class NotificationViewModel : ViewModel() {


val response: LiveData<List<TenderProperty>>
    get() = _response

private var _responseByArray = ArrayList<TenderProperty>()
val responseByArray: List<TenderProperty>
    get() = _responseByArray

private val _navigateToSelectedProperty = MutableLiveData<TenderProperty>()
val navigateToSelectedProperty: LiveData<TenderProperty>
    get() = _navigateToSelectedProperty

// Create a Coroutine scope using a job to be able to cancel when needed
private var viewModelJob = Job()

private val coroutineScope = CoroutineScope(viewModelJob + Dispatchers.Main )


init {
    getTenderRealEstateProperties()
}

private fun getTenderRealEstateProperties() {

    coroutineScope.launch {
        // Get the Deferred object for our Retrofit request
        var getPropertiesDeferred = TenderApi.retrofitService.getProperties()
        try {
            // this will run on a thread managed by Retrofit
            val listResult = getPropertiesDeferred.await()

            _responseByArray= listResult as ArrayList<TenderProperty>

           Log.d("respbyary",responseByArray.toString())

        } catch (e: Exception) {

            _response.value = ArrayList()
            Log.d("class",responseByArray.toString())
        }
    }
}

This is the Adapter class

class ListTenderAdapter(context: Context, var tender: List<TenderProperty>) : ListAdapter<TenderProperty, ListTenderAdapter.TenderPropertyViewHolder>(DiffCallback),Filterable {

var originalData=tender

var filteredData = ArrayList<TenderProperty>()

//dought22
class TenderPropertyViewHolder(private var binding: TenderListViewBinding) : RecyclerView.ViewHolder(binding.root) {
    fun bind(tenderProperty: TenderProperty) {
        binding.property = tenderProperty
        binding.executePendingBindings()
    }
}

companion object DiffCallback : DiffUtil.ItemCallback<TenderProperty>()
{
    override fun areItemsTheSame(oldItem: TenderProperty, newItem: TenderProperty): Boolean {
        return oldItem === newItem
    }

    override fun areContentsTheSame(oldItem: TenderProperty, newItem: TenderProperty): Boolean {
        return oldItem.id == newItem.id
    }
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TenderPropertyViewHolder {
    return TenderPropertyViewHolder(TenderListViewBinding.inflate(LayoutInflater.from(parent.context)))
}

override fun onBindViewHolder(holder: TenderPropertyViewHolder, position: Int) {
    val tenderProperty = getItem(position)
    holder.bind(tenderProperty)
}

override fun getFilter(): Filter {

    return object : Filter() {

        override fun performFiltering(constraint: CharSequence?): FilterResults {

            var filteredList = ArrayList<TenderProperty>()
            if (constraint.isNullOrBlank()) {
                filteredData.addAll(originalData)
            }
            else {
                for (data in originalData) {
                    if (
                        data.id.toLowerCase().contains(constraint.toString().toLowerCase())||
                        data.price.toString().toLowerCase().contains(constraint.toString().toLowerCase())||
                        data.type.toLowerCase().contains(constraint.toString().toLowerCase()))
                    {
                        filteredList.add(data)
                    } }
            }
            val filterResults = FilterResults()
            filterResults.values = filteredList
            return filterResults
        }
        override fun publishResults(constraint: CharSequence, results: FilterResults) {

            filteredData.clear()
            filteredData.addAll(results.values as ArrayList<TenderProperty>)
            notifyDataSetChanged()

        }
    }}}

This is the Activity

 class TenderListActivity:AppCompatActivity() {

lateinit var adapter: ListTenderAdapter
lateinit var search:EditText
private lateinit var binding: FragmentAvailabletenderBinding
private val viewModel: NotificationViewModel by lazy {
    ViewModelProviders.of(this).get(NotificationViewModel::class.java)
}

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.fragment_availabletender)

    binding = DataBindingUtil.setContentView<FragmentAvailabletenderBinding>(
        this,
        R.layout.fragment_availabletender
    )

    search = binding.editMobileNo

    val divider = DividerItemDecoration(applicationContext, DividerItemDecoration.VERTICAL)
    binding.tenderList.addItemDecoration(divider)

    setupRecyclerView()
    initViewModel()
    search()
    backButton()
}

private fun setupRecyclerView() {

    binding.tenderList.addItemDecoration(MarginItemDecoration(5))
    adapter = ListTenderAdapter(this, viewModel.responseByArray)
    binding.tenderList.setAdapter(adapter)

}

private fun initViewModel() {
    viewModel.response.observe(this, Observer {
        adapter.submitList(it)
    })

}

private fun backButton()
{
    binding.backbtn.setOnClickListener(View.OnClickListener {

        val backbtn: Intent = Intent(this,MainActivity::class.java)
        startActivity(backbtn)

    })
}

private fun search()
{
       search.addTextChangedListener(object : TextWatcher {
        override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {
        }

        override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
            adapter.getFilter().filter(s.toString())

        }

        override fun afterTextChanged(s: Editable) {

        }
    })
}}

Comments

Comment posted by anish sethiya

While writing list. filter, It is getting an error.

READ  [FIXED] gradle - Execution failed for JetifyTransform with android.tools.lint
Powered by Inline Related Posts

Comment posted by Silence

i mean the data.filter not the recycleview.filter . use the filter to filter the data what you want .then reset the data and notify

Comment posted by anish sethiya

I used the filter but it is not working, maybe the problem is somewhere else.In below comment I the filter code what I added.

Comment posted by anish sethiya

else { originalData.filter { it.id.contains(queryString) || it.imgSrcUrl.contains(queryString) || it.price.toString().contains(queryString) } filteredData.addAll(originalData) }

Android Tags:android, java, kotlin

Post navigation

Previous Post: [FIXED] Xamarin.forms – Trouble behaviour between ListView & keyboard
Next Post: [FIXED] android – two elements in linear layout are packed to center instead of to the sides

Related Posts

[FIXED] firebase – TagManager in Android : Failed to load the container. NO default container resource found with resource ID -1 Android
[FIXED] java – Add Permission For Lock Screen Notification Android Programmatically Android
[FIXED] raspberry pi3 – Restart RPI 3 Model B Andoid Things remotely Android
[FIXED] android – Why is LocationCallback not firing within CallbackToFutureAdapter? Android
[FIXED] java – How to change Firebase account from android project Android
[FIXED] android – install_referrer mail from google Android

Archives

  • March 2023
  • February 2023
  • January 2023
  • December 2022
  • November 2022
  • October 2022
  • September 2022

Categories

  • ¿Cómo
  • ¿Cuál
  • ¿Cuándo
  • ¿Cuántas
  • ¿Cuánto
  • ¿Qué
  • Android
  • Are
  • At
  • C'est
  • Can
  • Comment
  • Did
  • Do
  • Does
  • Est-ce
  • Est-il
  • For
  • Has
  • Hat
  • How
  • In
  • Is
  • Ist
  • Kann
  • Où
  • Pourquoi
  • Quand
  • Quel
  • Quelle
  • Quelles
  • Quels
  • Qui
  • Should
  • Sind
  • Sollte
  • Uncategorized
  • Wann
  • Warum
  • Was
  • Welche
  • Welchen
  • Welcher
  • Welches
  • Were
  • What
  • What's
  • When
  • Where
  • Which
  • Who
  • Who's
  • Why
  • Wie
  • Will
  • Wird
  • Wo
  • Woher
  • you can create a selvedge edge: You can make the edges of garter stitch more smooth by slipping the first stitch of every row.2022-02-04
  • you really only need to know two patterns: garter stitch

Recent Posts

  • Can VPN be traced by police?
  • Where were Kaiser-Frazer cars built?
  • How do you make gold rose gold paint?
  • What are the newest type of dentures?
  • Can you wear joggers as dress pants?

Recent Comments

No comments to show.

Copyright © 2023 Snappy1.

Powered by PressBook Grid Dark theme