Kotlin ArrayAdapter Error: None of the following functions can be called with the arguments supplied

Kotlin ArrayAdapter Error: None of the following functions can be called with the arguments supplied

我是 Android 开发的 Kotlin 新手。在执行教程项目时,我需要将 ArrayAdapter 与自定义 class 一起使用。构建项目因错误而失败。

The MainActivity.kt class throwing the error:

    class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        setSupportActionBar(toolbar)
    }

    val dm = DataManager()
    val adapterCourses = ArrayAdapter<CourseInfo>(
        context = this,
        android.R.layout.simple_spinner_item,
        dm.courses.values.toList()
    )

    override fun onCreateOptionsMenu(menu: Menu): Boolean {
        // Inflate the menu; this adds items to the action bar if it is present.
        menuInflater.inflate(R.menu.menu_main, menu)
        return true
    }

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        return when (item.itemId) {
            R.id.action_settings -> true
            else -> super.onOptionsItemSelected(item)
        }
    }
}

错误:

None of the following functions can be called with the arguments supplied:
public constructor ArrayAdapter<T : Any!>(@RecentlyNonNull p0: Context!, p1: Int) defined in android.widget.ArrayAdapter
public constructor ArrayAdapter<T : Any!>(@RecentlyNonNull p0: Context!, p1: Int, @RecentlyNonNull p2: Array<(out) CourseInfo!>!) defined in android.widget.ArrayAdapter
public constructor ArrayAdapter<T : Any!>(@RecentlyNonNull p0: Context!, p1: Int, p2: Int) defined in android.widget.ArrayAdapter
public constructor ArrayAdapter<T : Any!>(@RecentlyNonNull p0: Context!, p1: Int, p2: Int, @RecentlyNonNull p3: Array<(out) CourseInfo!>!) defined in android.widget.ArrayAdapter
public constructor ArrayAdapter<T : Any!>(@RecentlyNonNull p0: Context!, p1: Int, p2: Int, @RecentlyNonNull p3: (Mutable)List<CourseInfo!>!) defined in android.widget.ArrayAdapter
public constructor ArrayAdapter<T : Any!>(@RecentlyNonNull p0: Context!, p1: Int, @RecentlyNonNull p2: (Mutable)List<CourseInfo!>!) defined in android.widget.ArrayAdapter

课程信息Class:

class CourseInfo (val courseId: String, val title: String)

DataManager Class:

class DataManager {
    val courses = HashMap<String, CourseInfo>()
    val notes = ArrayList<NoteInfo>()

    init {
        initializeCourses()
    }

    private fun initializeCourses () {
        var course = CourseInfo(courseId = "android_intent", title = "Android programming with intent.")
        this.courses.set(course.courseId, course)

        course = CourseInfo(courseId = "android_async", title = "Android Async Programming and Services.")
        courses.set(course.courseId, course)

        course = CourseInfo(courseId = "java_lang", title = "Java Fundamentals: The Java Language.")
        courses.set(course.courseId, course)

        course = CourseInfo(courseId = "java_core", title = "Java Fundamentals: The Core Platforms.")
        courses.set(course.courseId, course)
    }
}

使用下面的代码

val courseList:List<CourseInfo>= dm.courses.values.toList()
val adapterCourses = ArrayAdapter<CourseInfo>(this,android.R.layout.simple_spinner_item,courseList)

非 Kotlin 函数不允许命名参数。

问题是因为您在 kotlin 文件中调用 java ArrayAdapter 构造函数。您将无法为其提供参数标签。

因此,通过简单的更正即可解决问题。(注意,我删除了第一个参数中的上下文标签。)

val adapterCourses = ArrayAdapter<CourseInfo>(this,
            android.R.layout.simple_spinner_item,
            dm.courses.values.toList())

也许为时已晚,但也许对某人有所帮助。如果您使用的是片段,则不会通过已检查的答案来解决。您必须像这样调用 activity 上下文。

val adapter = activity?.let {
        ArrayAdapter<String>(
            it,
            android.R.layout.simple_spinner_item,
            campaignsType
        )
    }

调用 requireContext() 代替上下文参数

val 适配器 = activity?.let { ArrayAdapter(it.applicationContext, R.layout.support_simple_spinner_dropdown_item, stringArray) } as SpinnerAdapter