使用 Kotlin 在 Android 中创建自定义 Spinner 适配器

Wae*_*låh 3 kotlin android-studio

我正在尝试使用Spinner自定义适配器来显示带有如下文本的图像

我想要的结果

但我有很多未解决的参考资料,所以我认为我做了一些非常错误的事情

我有两个片段,微调器位于第二个片段内 custome_spinner.xml,是自定义布局文件

Android Studio 版本 3.1.2,kotlin_version = '1.2.30'以及gradle:3.1.2

CustomeSpinnerAdapter.kt

import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter

class customeSpinnerAdapter : BaseAdapter {
    override fun getItem(p0: Int): Any {
        return flag.length
    }

    override fun getItemId(p0: Int): Long {
        return null
    }

    override fun getCount(): Int {
        return 0
    }

    val country: String
    val flag: String
    fun customeSpinnerAdapter(context: Context, name: String, image: String) {
        this.country = name
        this.flag = image

        val inflater = LayoutInflater.from(context)
    }

    override fun getView(p0: Int, p1: View?, p2: ViewGroup?): View {
        val view = inflater.inflate(R.layout.custom_spinner)
        spinner_image.setImageResource(flag)
        spinner_country.setText(country)
        return view
    }
}
Run Code Online (Sandbox Code Playgroud)

定制_spinner.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <ImageView
        android:id="@+id/spinner_image"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:padding="5dp"
        android:src="@drawable/us" />

    <TextView
        android:id="@+id/spinner_country"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:text="Custom Text"
        android:textColor="#000" />

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

fragment_second.xml中的小部件

<Spinner
    android:id="@+id/spinner"
    android:layout_height="wrap_content"
    android:layout_marginEnd="8dp"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="12dp"
    android:layout_width="368dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/from_textView" />
Run Code Online (Sandbox Code Playgroud)

小智 5

你的问题出在customeSpinnerAdapter.kt

  customeSpinnerAdapter.kt
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter

class customeSpinnerAdapter : BaseAdapter{
    override fun getItem(p0: Int): Any {
        return flag.length
    }

    override fun getItemId(p0: Int): Long {
        return null
    }

    override fun getCount(): Int {
        return 0
    }

    val country:String
    val flag:String
    //Add this
    val inflater : LayoutInflater

    fun customeSpinnerAdapter(context:Context,name:String,image:String){
        this.country = name
        this.flag = image

        //val inflater  = LayoutInflater.from(context)
        inflater  = LayoutInflater.from(context)
    }
    override fun getView(p0: Int, p1: View?, p2: ViewGroup?): View {
        val view = inflater.inflate(R.layout.custome_spinner)
        spinner_image.setImageResource(flag)
        spinner_country.setText(country)
        return view
    }
}
Run Code Online (Sandbox Code Playgroud)