Edgar Davids
Edgar Davids

Reputation: 45

how can I sort company list based on Name ascending, descending order in my adapter?

I am developing new app and how can I sort the company list based on Name ascending, descending order in my adapter?.

below my Adapter class

class SpectrumAdapter(
    private val spectrumResponse: ArrayList <SpectrumResponseItem>
) : RecyclerView.Adapter<SpectrumViewHolder>() {


    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SpectrumViewHolder {

        val view =
            LayoutInflater.from(parent.context).inflate(R.layout.spectrum_list, parent, false)
        return SpectrumViewHolder(view)

    }

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

    override fun onBindViewHolder(holder: SpectrumViewHolder, position: Int) {
        return holder.bind(spectrumResponse[position])
    }
}

the adapter class.

    class SpectrumViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

        private val companyLogo: ImageView = itemView.findViewById(R.id.companyLogo)
        private val companyName: TextView = itemView.findViewById(R.id.companyName)
        private val companyWebsite: TextView = itemView.findViewById(R.id.companyWebsite)

        fun bind(spectrum: SpectrumResponseItem) {
            Glide.with(itemView.context).load(R.drawable.placehold).into(companyLogo)

            companyName.text = spectrum.company
            companyWebsite.text = spectrum.website
        }

    }

below list XML layout

<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/cardview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="4dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">


        <ImageView
            android:id="@+id/companyLogo"
            android:layout_width="45dp"
            android:layout_height="26dp"
            android:layout_marginStart="8dp"
            android:layout_marginLeft="8dp"
            android:layout_marginEnd="11dp"
            android:layout_marginRight="11dp"
            android:padding="4dp"
            android:scaleType="fitXY"
            app:layout_constraintBottom_toTopOf="@+id/companyWebsite"
            app:layout_constraintEnd_toStartOf="@+id/companyName"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="1.0" />

        <TextView
            android:id="@+id/companyWebsite"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="56dp"
            android:layout_marginLeft="56dp"
            android:layout_marginTop="40dp"
            android:text="Company Website"
            android:textSize="8sp"
            app:layout_constraintBottom_toBottomOf="@id/companyLogo"
            app:layout_constraintStart_toStartOf="@+id/companyLogo"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.0" />

        <TextView
            android:id="@+id/companyName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="12dp"
            android:layout_marginEnd="286dp"
            android:layout_marginRight="286dp"
            android:text="Company Name"
            android:textSize="8sp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@+id/companyLogo"
            app:layout_constraintTop_toTopOf="parent" />

    </androidx.constraintlayout.widget.ConstraintLayout>


</androidx.cardview.widget.CardView>

I want to implement sorting function where user can sort companyName ascending and descending order how can I implement it?

Upvotes: 0

Views: 282

Answers (1)

Miftahun Najat
Miftahun Najat

Reputation: 13

You can add method sortAscending and sortDescending in your adapter. But you need to change your private val spectrumResponse: ArrayList to var because the data can be changed while sorting. here is full code example for adapter.

class SpectrumAdapter(
    private var spectrumResponse: ArrayList <SpectrumResponseItem>
) : RecyclerView.Adapter<SpectrumViewHolder>() {


    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SpectrumViewHolder {

        val view =
            LayoutInflater.from(parent.context).inflate(R.layout.spectrum_list, parent, false)
        return SpectrumViewHolder(view)

    }

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

    override fun onBindViewHolder(holder: SpectrumViewHolder, position: Int) {
        return holder.bind(spectrumResponse[position])
    }

    fun sortAscending() {
        spectrumResponse = spectrumResponse.sortedBy { it.name }
        notifyDataSetChanged()
    }

    fun sortDescending() {
        spectrumResponse = spectrumResponse.sortedByDescending { it.name }
        notifyDataSetChanged()
    }
 
}

then you can call it in your button on you activity like this.

btn_sort_ascending.setOnClickListener {
    adapter.sortAscending()
}

the btn_sort_ascending is the view id of your button. the adapter is your created adapter.

Upvotes: 0

Related Questions