Сбой при попытке получить идентификатор кнопки, созданной программным способом.Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Сбой при попытке получить идентификатор кнопки, созданной программным способом.

Сообщение Anonymous »

У меня есть приложение для Android, которое сгенерировало 5 списков из 5 чисел.
Изображение
< /p>
Во-вторых, после нажатия кнопки «Выбрать числа» будут удалены повторяющиеся номера и распечатаны все числа, сгенерированные в виде кнопок.
Изображение

Моя программа аварийно завершает работу из-за этого кода MainActivity.kt
val generatedNumbersCollected: Button = findViewById(R.id.root)

generatedNumbersCollected.setOnClickListener {
Toast.makeText(this, "Clicked 1", Toast.LENGTH_SHORT).show()
}

Я предполагаю, что R.id.root имеет значение null, поэтому происходит сбой. Я ищу способ решить эту проблему. Каким может быть возможное решение?
MainActivity.kt

import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.view.ViewGroup
import android.widget.Button
import android.widget.TextView
import android.widget.Toast
import androidx.activity.ComponentActivity
import androidx.constraintlayout.helper.widget.Flow
import androidx.constraintlayout.widget.ConstraintLayout
import kotlin.random.Random

class MainActivity : ComponentActivity() {

private var concat: Set = emptySet()

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

val generateButton: Button = findViewById(R.id.buttonGenerate)
val selNumbers: Button = findViewById(R.id.selectNumbers)

val numberGenerated: TextView = findViewById(R.id.numberGenerated)
val numberGenerated2: TextView = findViewById(R.id.numberGenerated2)
val numberGenerated3: TextView = findViewById(R.id.numberGenerated3)
val numberGenerated4: TextView = findViewById(R.id.numberGenerated4)
val numberGenerated5: TextView = findViewById(R.id.numberGenerated5)
val collectedNumbers: TextView = findViewById(R.id.collectedNumbers)

//var addBtn: Button? = null
//linearLayout = findViewById(R.id.linearLayout)

generateButton.setOnClickListener {
val randomNumbers = generateSequence {
Random.nextInt(1..70)
}.distinct().take(5).sorted().toSet()
val randomNumbers2 = generateSequence {
Random.nextInt(1..70)
}.distinct().take(5).sorted().toSet()
val randomNumbers3 = generateSequence {
Random.nextInt(1..70)
}.distinct().take(5).sorted().toSet()
val randomNumbers4 = generateSequence {
Random.nextInt(1..70)
}.distinct().take(5).sorted().toSet()
val randomNumbers5 = generateSequence {
Random.nextInt(1..70)
}.distinct().take(5).sorted().toSet()

concat = concatenate(
randomNumbers,
randomNumbers2,
randomNumbers3,
randomNumbers4,
randomNumbers5
)

numberGenerated.text = randomNumbers.toString()
numberGenerated2.text = randomNumbers2.toString()
numberGenerated3.text = randomNumbers3.toString()
numberGenerated4.text = randomNumbers4.toString()
numberGenerated5.text = randomNumbers5.toString()
}

selNumbers.setOnClickListener {
numberGenerated.text = "none"
numberGenerated2.text = "none"
numberGenerated3.text = "none"
numberGenerated4.text = "none"
numberGenerated5.text = "none"
collectedNumbers.text = concat.toString()
createAndAddView()

//val intent = Intent(this@MainActivity, SelectNumbers::class.java)
//startActivity(intent)
}

/*val generatedNumbersCollected: Button = findViewById(R.id.root)
generatedNumbersCollected.setOnClickListener {
Toast.makeText(this, "Clicked 1", Toast.LENGTH_SHORT).show()
}*/

}

private fun createAndAddView()
{
val root = findViewById(R.id.root)
lateinit var button: Button

val array: IntArray = concat.toIntArray()

for ((index, i) in array.withIndex()) {
button = Button(this).apply {
layoutParams = ViewGroup.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT)
id = index + 1
text = i.toString()
}
root.addView(button)

}
val flow = findViewById(R.id.flow)
flow.referencedIds = (1 .. array.size).toList().toIntArray()

}

}

private fun Random.nextInt(range: IntRange): Int {
return range.first + nextInt(range.last - range.first)
}

private fun concatenate(
randomNumbers: Set,
randomNumbers2: Set,
randomNumbers3: Set,
randomNumbers4: Set,
randomNumbers5: Set
): Set {
return randomNumbers + randomNumbers2 + randomNumbers3 + randomNumbers4 + randomNumbers5
}

activity_main.xml
































Вот логарифм:
FATAL EXCEPTION: main
Process: com.example.randomgenerator, PID: 19302
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.randomgenerator/com.example.randomgenerator.MainActivity}: java.lang.ClassCastException: androidx.constraintlayout.widget.ConstraintLayout cannot be cast to android.widget.Button
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: java.lang.ClassCastException: androidx.constraintlayout.widget.ConstraintLayout cannot be cast to android.widget.Button
at com.example.randomgenerator.MainActivity.onCreate(MainActivity.kt:84)
at android.app.Activity.performCreate(Activity.java:7994)
at android.app.Activity.performCreate(Activity.java:7978)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) 
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) 
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) 
at android.os.Handler.dispatchMessage(Handler.java:106) 
at android.os.Looper.loop(Looper.java:223) 
at android.app.ActivityThread.main(ActivityThread.java:7656) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 


Подробнее здесь: https://stackoverflow.com/questions/788 ... rogrammati
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»