findViewById 一直给我错误和头痛
findViewById keeps giving me errors and a headache
大家好,
我是 Kotlin 的新手,我一直在努力重新创建我的代码以使其更容易学习。我创建了一个骰子应用程序并且可以正常工作。但每次我创建一个新项目并开始时。我总是在 findViewById(R.id.) 上收到错误消息,我首先使用分配的所有 ID 进行布局,但无论我做什么,我都会不断收到此错误消息。我使用 Android Studio。
我希望有人可以帮助我摆脱这种挫败感 head.I 想知道为什么它一直出现该错误。提前致谢。
package com.example.dicedicebaby
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)
//button action`
val rollButton: Button = findViewById(R.id.button)
//action of the button when pressed.
rollButton.setOnClickListener{ stones()}
}
}
fun stones(){
//The normal dice
val fDice=Dice(6)
//D20
val dDice = Dice(20)
//action of dice roll
val dice = fDice.roll()
//D20 action
val secondDice = dDice.roll()
//view
val resultView: TextView = findViewById(R.id.dice)
resultView.text = dice.toString()
val secondView: TextView = findViewById(R.id.Ddice)
secondView.text = secondDice.toString()
}
//makes the dice a dice.
class Dice(private val numSides:Int){
fun roll():Int{
return (1..numSides).random()
}
}
好的,有时我在任何函数中定义 findViewById
也会遇到此错误。所以我以前是通过在合适的地方定义来解决的,你试试我的这个方法,说不定你的问题就解决了。只需从 fun stones()
中删除以下 2 个 findViewById
val resultView: TextView = findViewById(R.id.dice)
val secondView: TextView = findViewById(R.id.Ddice)
并按照我提到的第一个 findViewById
代码添加它们。
val rollButton: Button = findViewById(R.id.button)
val resultView: TextView = findViewById(R.id.dice)
val secondView: TextView = findViewById(R.id.Ddice)
如果您遇到同样的问题,请使用Logcat
告诉我。
建议的方法是迁移到 view binding。
另外,您应该在 MainActivity
class 正文中声明 stones()
函数:
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
//action of the button when pressed.
binding.rollButton.setOnClickListener{ stones() }
}
fun stones(){
//The normal dice
val fDice=Dice(6)
//D20
val dDice = Dice(20)
//action of dice roll
val dice = fDice.roll()
//D20 action
val secondDice = dDice.roll()
//view
binding.dice.text = dice.toString()
binding.Ddice.text = secondDice.toString()
}
}
大家好,
我是 Kotlin 的新手,我一直在努力重新创建我的代码以使其更容易学习。我创建了一个骰子应用程序并且可以正常工作。但每次我创建一个新项目并开始时。我总是在 findViewById(R.id.) 上收到错误消息,我首先使用分配的所有 ID 进行布局,但无论我做什么,我都会不断收到此错误消息。我使用 Android Studio。 我希望有人可以帮助我摆脱这种挫败感 head.I 想知道为什么它一直出现该错误。提前致谢。
package com.example.dicedicebaby
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)
//button action`
val rollButton: Button = findViewById(R.id.button)
//action of the button when pressed.
rollButton.setOnClickListener{ stones()}
}
}
fun stones(){
//The normal dice
val fDice=Dice(6)
//D20
val dDice = Dice(20)
//action of dice roll
val dice = fDice.roll()
//D20 action
val secondDice = dDice.roll()
//view
val resultView: TextView = findViewById(R.id.dice)
resultView.text = dice.toString()
val secondView: TextView = findViewById(R.id.Ddice)
secondView.text = secondDice.toString()
}
//makes the dice a dice.
class Dice(private val numSides:Int){
fun roll():Int{
return (1..numSides).random()
}
}
好的,有时我在任何函数中定义 findViewById
也会遇到此错误。所以我以前是通过在合适的地方定义来解决的,你试试我的这个方法,说不定你的问题就解决了。只需从 fun stones()
val resultView: TextView = findViewById(R.id.dice)
val secondView: TextView = findViewById(R.id.Ddice)
并按照我提到的第一个 findViewById
代码添加它们。
val rollButton: Button = findViewById(R.id.button)
val resultView: TextView = findViewById(R.id.dice)
val secondView: TextView = findViewById(R.id.Ddice)
如果您遇到同样的问题,请使用Logcat
告诉我。
建议的方法是迁移到 view binding。
另外,您应该在 MainActivity
class 正文中声明 stones()
函数:
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
//action of the button when pressed.
binding.rollButton.setOnClickListener{ stones() }
}
fun stones(){
//The normal dice
val fDice=Dice(6)
//D20
val dDice = Dice(20)
//action of dice roll
val dice = fDice.roll()
//D20 action
val secondDice = dDice.roll()
//view
binding.dice.text = dice.toString()
binding.Ddice.text = secondDice.toString()
}
}