Играя с Android и следуя этому простому введению, я не могу понять resultsTextView.text = rand.toString() для запуска. Не уверен, что мне не хватает.

Основной код Kotlin выглядит так (MainActivity.kt):

package io.github.ovid.randomizer

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.SeekBar
import android.widget.TextView
import kotlin.random.Random

class MainActivity : AppCompatActivity() {

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

        val rollButton = findViewById<Button>(R.id.rollButton)
        val resultsTextView = findViewById<TextView>(R.id.resultsTextView)
        val seekBar = findViewById<SeekBar>(R.id.seekBar)

        rollButton.setOnContextClickListener {
            val rand = Random.nextInt(seekBar.progress) + 1
            resultsTextView.text = rand.toString()
            true
        }
    }
}

И мой activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/rollButton"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="96dp"
        android:layout_marginLeft="96dp"
        android:layout_marginEnd="96dp"
        android:layout_marginRight="96dp"
        android:layout_marginBottom="24dp"
        android:text="Roll"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <SeekBar
        android:id="@+id/seekBar"
        style="@style/Widget.AppCompat.SeekBar.Discrete"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="32dp"
        android:layout_marginLeft="32dp"
        android:layout_marginEnd="32dp"
        android:layout_marginRight="32dp"
        android:layout_marginBottom="24dp"
        android:max="10"
        android:progress="3"
        app:layout_constraintBottom_toTopOf="@+id/rollButton"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="24dp"
        android:layout_marginLeft="24dp"
        android:layout_marginBottom="16dp"
        android:text="How Many"
        app:layout_constraintBottom_toTopOf="@+id/seekBar"
        app:layout_constraintStart_toStartOf="parent" />

    <View
        android:id="@+id/divider"
        android:layout_width="409dp"
        android:layout_height="1dp"
        android:layout_marginBottom="16dp"
        android:background="?android:attr/listDivider"
        app:layout_constraintBottom_toTopOf="@+id/textView"
        tools:layout_editor_absoluteX="1dp" />

    <TextView
        android:id="@+id/resultsTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginTop="0dp"
        android:layout_marginLeft="0dp"
        android:textAppearance="@style/TextAppearance.AppCompat.Large"
        android:textSize="144sp"
        app:layout_constraintBottom_toTopOf="@+id/divider"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

Все в макете в эмуляторе выглядит правильно, но нажатие кнопки «Прокрутить» показывает, что я нажал кнопку , но текст не отображается в resultsTextView.

0
Curtis Poe 13 Окт 2019 в 08:05
Вам не нужен findViewById в Котлине. Вы можете удалить эти 3 строки (а затем импортировать синтетический текст с помощью Alt+Enter)
 – 
AjahnCharles
13 Окт 2019 в 11:24

2 ответа

Ооо! Это было setOnClickListener, а не setOnContextClickListener. Внес изменения и удалил true в конце, и все заработало. Простите за шум.

2
Curtis Poe 13 Окт 2019 в 08:09

Просто замените метод события с setOnContextClickListener на setOnClickListener, и он будет работать нормально. Именно так:

rollButton.setOnClickListener {
        val rand = Random.nextInt(seekBar.progress) + 1
        resultsTextView.text = rand.toString()
    }

Надеюсь, это поможет, Счастливого кодирования.

0
Saadat Sayem 13 Окт 2019 в 08:39