【问题标题】:Android Spinner getDropDownView repeating items after selection选择后Android Spinner getDropDownView重复项目
【发布时间】:2017-07-24 11:20:24
【问题描述】:

我有以下 SpinnerAdapter,它成功地为我带来了我的对象 Discipline 列表,它具有微调器和下拉项的正确布局样式。但是当我选择其中一个项目时,位置 0 文本会在所选项目位置重复。

class ClassesSpinnerAdapter(context: Context, resourceId: Int,
                        val disciplineClasses: List<Discipline>) : ArrayAdapter<Discipline>(context, resourceId, disciplineClasses) {

override fun getItem(position: Int): Discipline {
    return disciplineClasses[position]
}

override fun getCount(): Int {
    return disciplineClasses.size
}

override fun getItemId(position: Int): Long {
    return super.getItemId(position)
}

override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
    var holder: ClassSpinnerHolder
    var rowView: View

    if (convertView == null) {
        rowView = LayoutInflater.from(parent?.context).inflate(R.layout.classes_spinner_row, parent, false)
        holder = ClassSpinnerHolder()

        holder.classNameTxt = rowView.findViewById(R.id.classes_spinner_text) as TextView?
        holder.classNameTxt?.text = disciplineClasses[position].className.replace("ano", "")
        rowView.tag = holder
    } else {
        holder = convertView.tag as ClassSpinnerHolder
        rowView = convertView
    }
    val discipline: Discipline = disciplineClasses[position];
    if (discipline != null) {
        holder.classNameTxt?.text = disciplineClasses[position].className.replace("ano", "")
    }
    return rowView
}


override fun getDropDownView(position: Int, convertView: View?, parent: ViewGroup?): View {
    var holder: ClassSpinnerHolder
    var rowView: View

    if (convertView == null) {
        rowView = LayoutInflater.from(parent?.context).inflate(R.layout.classes_spinner_row, parent, false)
        holder = ClassSpinnerHolder()

        holder.classNameTxt = rowView.findViewById(R.id.classes_spinner_text) as TextView?
        holder.classNameTxt?.text = disciplineClasses[position].className.replace("ano", "")
        rowView.tag = holder
    } else {
        holder = convertView.tag as ClassSpinnerHolder
        rowView = convertView
    }
    return rowView
}

inner class ClassSpinnerHolder() {
    var classNameTxt: TextView? = null
}

这是我得到的结果:

我通过删除 getDropDownView() 方法并覆盖我的模型类上的 toString 解决了这个问题,但我想要一个更好的解决方案,我认为我以错误的方式覆盖了 getDropDownView(),有人可以帮助我吗?

【问题讨论】:

    标签: android spinner kotlin dropdown


    【解决方案1】:

    getDropDownView() 中,您只更新if (convertView == null) 案例中的视图值。每次调用方法时都应该更新所有值,否则回收的视图中会有垃圾。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-01
      • 1970-01-01
      • 2011-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-14
      • 1970-01-01
      相关资源
      最近更新 更多