gpt4 book ai didi

android - 将自定义微调器库从 Java 转换为与 Kotlin 一起使用。监听器的问题

转载 作者:行者123 更新时间:2023-12-03 05:08:04 25 4
gpt4 key购买 nike

我正在开发一个小型 Android 应用程序。该应用程序使用了几个 Spinner。我希望能够使用微调器,但我希望微调器中的第一个选项是提示而不是可选择的。

我在 StackOverflow 上找到了许多解决方法。但不完全是我想要的。

我在 Github 上找到了以下 repo:https://github.com/sadra/AwesomeSpinner

这正是我想做的。但是,它是用 Java 编写的,而我的应用程序是用 Kotlin 编写的。我知道他们应该一起工作,但我无法让它发挥作用。我很确定这是我的经验不足,而不是 repo 或 Kotlin v. Java 的问题。

这是我的微调器。它存在于 onViewCreated() 的 Fragment 中。

//String array
val companyNames = resources.getStringArray(R.array.companyName_array)

var nameSpinner = binding.spinnerCustomerName

//Adapter for spinner
nameSpinner.adapter = ArrayAdapter(activity, android.R.layout.simple_spinner_dropdown_item, companyNames)

//item selected listener for spinner
nameSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onNothingSelected(p0: AdapterView<*>?) {
TODO("not implemented yet")
}

override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
selectedCompanyName = companyNames[p2]
Log.v(LOG_TAG, "Spinner Item Selected --> $companyNames")
}
}

AwesomeSpinner 文档说要这样声明:
AwesomeSpinner nameSpinner = (AwesomeSpinner) findViewById(R.id.spinner_customerName);

在我在 Kotlin 的应用程序中,我正在做:
var nameSpinner: AwesomeSpinner = binding.spinnerCustomerName as AwesomeSpinner

这就是我的麻烦开始的地方。我无法弄清楚如何正确设置适配器和监听器。我已经尝试了所有我能想到的方法,但我错过了一些东西或做错了什么。

解决这个问题,我无法正确使用适配器。
companyNamesAdapter.setAdapter(nameSpinner, 0)

以上是不正确的。 .setAdapter仍然是一个可解析的资源。

这是更正且有效的代码:
//String array
var nameSpinner: AwesomeSpinner = binding.spinnerCustomerName

//Adapter for spinner
var companyNamesAdapter = ArrayAdapter.createFromResource(activity,
R.array.companyname_array, android.R.layout.simple_spinner_dropdown_item)

nameSpinner.setAdapter(companyNamesAdapter, 0)

//item selected listener for spinner
nameSpinner.setOnSpinnerItemClickListener(
object:AwesomeSpinner.onSpinnerItemClickListener<String>() {

nameSpinner.setOnSpinnerItemClickListener { position: Int, itemAtPosition ->
selectedCompanyName = nameSpinner.selectedItem[position].toString()
Log.v(LOG_TAG, "Spinner Item Selected --> $companyNamesAdapter and $itemAtPosition" )
}

我的 XML 已设置好,看起来还不错。 Gradle 中的依赖项和存储库也是如此。 .

最佳答案

刚刚从他们的手册中复制了代码,它在 Kotlin 中运行良好:

    val spinner = findViewById<AwesomeSpinner>(R.id.spinner)
val categories = listOf("Automobile", "Ariplane")
val categoriesAdapter = ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, categories)
spinner.setAdapter(categoriesAdapter)
spinner.setOnSpinnerItemClickListener { position, itemAtPosition ->
Toast.makeText(this, "Selected on $position with $itemAtPosition", Toast.LENGTH_SHORT).show()
}

它有帮助还是我想念你的问题?

UPD。看起来你混淆了适配器和微调器: companyNamesAdapter.setAdapter(nameSpinner, 0) .应该是 nameSpinner.setAdapter(companyNamesAdapter, 0)

关于android - 将自定义微调器库从 Java 转换为与 Kotlin 一起使用。监听器的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53844464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com