当前位置: 首页 > 知识库问答 >
问题:

如何在适配器中根据名称升序、降序对公司列表进行排序?

戚飞雨
2023-03-14
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])
    }
}
    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
        }

    }

下面列出XML布局

<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>

我想实现排序功能,在那里用户可以排序公司名称升序和降序,我如何实现它?

共有1个答案

东方飞捷
2023-03-14

可以在适配器中添加方法sortAscending和sortDescending。但是您需要将私有val spectrumresponse:arraylist更改为var,因为可以在排序时更改数据。以下是适配器的完整代码示例。

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()
    }
 
}

然后你可以在你的按钮上调用它,就像这样。

btn_sort_ascending.setOnClickListener {
    adapter.sortAscending()
}

btn_sort_ascending是按钮的视图id。适配器是您创建的适配器。

 类似资料:
  • 我有数据。表中有大约300万行和40列。我希望在组内按降序对该表排序,如以下sql模拟代码: 数据中是否存在等效的方法。这张桌子可以吗?到目前为止,我必须将其分解为两个步骤: 这非常快,只需要几秒钟。 这一步需要更长的时间(5分钟)。 更新:有人评论要执行<code>X 我的方法是:setkey()然后是order(-Month) 我现在的问题是:如果我想按年、MemberId和一个又一个排序(年

  • 有没有可能对Pandas DataFrame的行相对于多列进行排序,并将列中的一些行按升序排列,将其他行(同一列中的行)按降序排列?这里有一个我正在寻找的可重复的小例子: 如何根据以下“规则”对上面的DataFrame对象进行排序? 第一优先级:按“类别”列按字母升序排序 更实际地说,我要找的结果是这样的: 有没有直接的方法可以做到这一点? 为了解决这个问题,我创建了一个额外的“排序”列,并操作其

  • 我有一个像这样的数据框- 我有一个这样的列表- 现在,我想根据列名列表对数据框进行排序 因此,新的数据框将有列名称-

  • 我有98000个美国家庭街道地址,我需要按照“步行”的顺序进行排序,也就是说,按照你要走的顺序,沿着街道的一侧走,然后穿过街道往回走。 所需的df结果,对奇数街道编号进行升序排序,然后对偶数街道编号切换到降序排序。[抱歉,第一个问题,还没有资格复制Jupyter笔记本的图像] 4列:数字、街道、城镇、偶数 “编号”列的预期结果:1231 1233 1235 1237 1239 1238 1236

  • 我想按第三个和第一个元素对元组数组进行排序,因此我使用了以下代码: 我的问题是,在前面的例子中,我可以按第三个元素和第一个元素的升序排序,也可以按它们的降序排序(使用反向)。但是如何按第三个元素的升序和第一个元素的降序排序。 请在你的回答中考虑以下情况: 在这种情况下,我不知道内部数组的确切大小(取决于我读入该数组的文件模式),我想按侧中的所有项进行排序(一些升序和一些降序)。 编辑:看起来,我明