Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Spinner getDropDownView选择后重复项目_Android_Spinner_Kotlin_Dropdown - Fatal编程技术网

Android Spinner getDropDownView选择后重复项目

Android Spinner getDropDownView选择后重复项目,android,spinner,kotlin,dropdown,Android,Spinner,Kotlin,Dropdown,我有以下SpinnerAdapter,它成功地为我提供了一个对象规程列表,其中包含微调器和下拉项的正确布局样式。但当我选择其中一个项目时,位置0文本会在所选项目位置上重复 class ClassesSpinnerAdapter(context: Context, resourceId: Int, val disciplineClasses: List<Discipline>) : ArrayAdapter<Discipline&g

我有以下SpinnerAdapter,它成功地为我提供了一个对象规程列表,其中包含微调器和下拉项的正确布局样式。但当我选择其中一个项目时,位置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
}
class ClassesSpinnerAdapter(上下文:上下文,资源ID:Int,
val纪律课堂:列表):ArrayAdapter(上下文、资源ID、纪律课堂){
覆盖趣味getItem(位置:Int):规程{
返回纪律等级[职位]
}
重写fun getCount():Int{
返回大小
}
覆盖getItemId(位置:Int):长{
返回super.getItemId(位置)
}
覆盖视图(位置:Int,转换视图:View?,父视图:ViewGroup?):视图{
var支架:类喷丝板支架
变量行视图:视图
if(convertView==null){
rowView=LayoutFlater.from(父级?.context)。充气(R.layout.classes\u微调器\u行,父级,false)
保持架=类喷丝头保持架()
holder.classNameTxt=rowView.findViewById(R.id.classes\u微调器\u文本)是否作为TextView?
holder.className TXT?.text=STRICECLASSES[position].className.replace(“ano”,“”)
rowView.tag=保持架
}否则{
holder=convertView.tag作为ClassSpinnerHolder
行视图=转换视图
}
val纪律:纪律=纪律等级[职位];
if(规程!=null){
holder.className TXT?.text=STRICECLASSES[position].className.replace(“ano”,“”)
}
返回行视图
}
覆盖getDropDownView(位置:Int,convertView:View?,父级:ViewGroup?):视图{
var支架:类喷丝板支架
变量行视图:视图
if(convertView==null){
rowView=LayoutFlater.from(父级?.context)。充气(R.layout.classes\u微调器\u行,父级,false)
保持架=类喷丝头保持架()
holder.classNameTxt=rowView.findViewById(R.id.classes\u微调器\u文本)是否作为TextView?
holder.className TXT?.text=STRICECLASSES[position].className.replace(“ano”,“”)
rowView.tag=保持架
}否则{
holder=convertView.tag作为ClassSpinnerHolder
行视图=转换视图
}
返回行视图
}
内类类喷丝头支架(){
var classNameTxt:TextView?=null
}
这是我得到的结果:

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

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

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