android - Kotlin for Android:OnItem 选定的侦听器
问题描述
我正在用 Kotlin 开发一个 android 项目
我想在侦听器之外获取 x 和 y 的值并在 textview gpa1 上打印乘法值,但它们没有改变
class sem1gpaactivity : AppCompatActivity(){
var x:Int=0
var y:Double=0.0
var z:Double=0.0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.sem1gpa)
val firstterm01 = arrayOf("0", "1", "2", "3", "4", "5", "6", "7", "8")
val spinner = findViewById<View>(R.id.spinnerfirsttermh1) as Spinner
val spinnerArrayAdapter = ArrayAdapter(this,
android.R.layout.simple_spinner_item, firstterm01)
spinnerArrayAdapter.setDropDownViewResource
(android.R.layout.simple_spinner_dropdown_item) // The drop down view
spinner.adapter = spinnerArrayAdapter
spinner.spinnerfirsttermh1!!.onItemSelectedListener = object :
AdapterView.OnItemSelectedListener {
override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3:
Long) {
when (p2){
0-> x=0
1-> x=1
2-> x=2
3-> x=3
4-> x=4
5-> x=5
6-> x=6
7-> x=7
8-> x=8
}
}
override fun onNothingSelected(p0: AdapterView<*>?) {}
}
val firstterm02 = arrayOf("A", "A-", "B+", "B", "B-", "C+", "C", "C-", "D+", "D", "F")
val spinner1 = findViewById<View>(R.id.spinnerfirsttermh11) as Spinner
val spinnerArrayAdapter1 = ArrayAdapter(this, android.R.layout.simple_spinner_item, firstterm02)
spinnerArrayAdapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) // The drop down view
spinner1.adapter = spinnerArrayAdapter1
spinner1.spinnerfirsttermh11!!.onItemSelectedListener = object :
AdapterView.OnItemSelectedListener {
override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int,
p3: Long) {
val spinnerLanguage2 = spinner1.getSelectedItem().toString()
when (p2){
0-> y=4.0
1-> y=3.7
2-> y=3.3
3-> y=3.0
4-> y=2.7
5-> y=2.3
6-> y=2.0
7-> y=1.7
8-> y=1.3
9-> y=1.0
10-> y=0.0
}
}
override fun onNothingSelected(p0: AdapterView<*>?) {}
}
z=x*y
gpa1.text = z.toString()
}}
z 结果为零,因为 x 和 y 未更改并且文本视图显示 000 我试图将 textiew 代码放在第一个微调器的侦听器中的乐趣中并仅显示 x 它可以工作,但是当我将 textview 代码放在侦听器之外时它什么也不显示
解决方案
文本不会像这样更改,因为应用程序仅在首次创建活动时执行 oncreate 方法,除非您销毁活动并再次创建它,因此您可以通过更改两个微调器侦听器中的 gpa1 文本来做到这一点,如下所示:
在第一个微调器侦听器中
spinner.spinnerfirsttermh1!!.onItemSelectedListener = object :
AdapterView.OnItemSelectedListener {
override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3:
Long) {
when (p2){
0-> x=0
1-> x=1
2-> x=2
3-> x=3
4-> x=4
5-> x=5
6-> x=6
7-> x=7
8-> x=8
}
z=x*y
tv.text = z.toString()
}
override fun onNothingSelected(p0: AdapterView<*>?) {}
}
在第二个微调器侦听器中
spinner1.spinnerfirsttermh11!!.onItemSelectedListener = object :
AdapterView.OnItemSelectedListener {
override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int,
p3: Long) {
val spinnerLanguage2 = spinner1.getSelectedItem().toString()
when (p2){
0-> y=4.0
1-> y=3.7
2-> y=3.3
3-> y=3.0
4-> y=2.7
5-> y=2.3
6-> y=2.0
7-> y=1.7
8-> y=1.3
9-> y=1.0
10-> y=0.0
}
z=x*y
tv.text = z.toString()
}
override fun onNothingSelected(p0: AdapterView<*>?) {}
}
推荐阅读
- c - C - 我应该使用引号还是方括号将标题包含在单独的目录中
- docker - Docker 日志 - 将时间从主机同步到容器
- php - 有没有办法让 PHP 在表格中向下获取第二行的值?
- reactjs - 登录成功时重定向页面
- android - Android BLE 和 HC-05(带 C 代码)数据发送和接收?
- java - 将 Xampp 连接到 Netbeans IDE (8.0.2)
- android - 为 editText 启动另一个活动错误消息
- javascript - 如何使用 props 更改 className ?(反应js/css)
- c# - 如何在 Asp.Net Core 3.1 中设置无效 Cookie
- sql - 存储过程中的 Openrowset 给出传输级错误