
< /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