Android双骰子App点击按钮仅显示第二个掷骰结果问题求助
问题根因
你对同一个按钮连续调用了两次setOnClickListener,Android控件的点击监听器是覆盖式赋值的,只有最后一次绑定的回调会生效,之前绑定的rollDice()逻辑会被直接覆盖,点击按钮时只会执行rollDice2(),自然只能看到第二个骰子的结果。
另外你额外定义的Dice2类、roll2()方法是完全冗余的,和原有Dice类的逻辑100%重复,直接复用原有类创建新实例即可。
修复步骤
- 移除重复的监听器绑定,只给按钮设置一次点击回调,在回调内部同时执行两个骰子的掷点逻辑
- 删除冗余的
Dice2类,第二个骰子直接复用Dice类生成实例
修正后的可运行代码:
package com.example.diceroller import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.Button import android.widget.TextView class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val rollButton: Button = findViewById(R.id.button) rollButton.setOnClickListener { rollDice() rollDice2() } } private fun rollDice() { val dice = Dice(6) val diceRoll = dice.roll() val resultTextView: TextView = findViewById(R.id.textView) resultTextView.text = diceRoll.toString() } private fun rollDice2() { val dice2 = Dice(6) val diceRoll2 = dice2.roll() val resultTextView: TextView = findViewById(R.id.textView2) resultTextView.text = diceRoll2.toString() } } class Dice(private val numSides: Int) { fun roll(): Int { return (1..numSides).random() } }
可选优化
- 把
findViewById的操作挪到onCreate生命周期里执行一次即可,不需要每次点击掷骰子都重新查找控件,减少无意义的性能开销 - 后续如果需要增加更多骰子,直接新建
Dice实例即可,不需要新增重复的类和方法
内容的提问来源于stack exchange,提问作者McGreggles
相关产品推荐
相关产品推荐

