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