@Juranja

Как упростить код setOnClickListener на Kotlin?

Доброго времени суток дамы и господа. Я начинающий, дело не имевший с языками программирования JAvA и Kotlin студент, если конечно можно сказать так в мои 37)) Возникло пару вопросов по Котлину. Где то конечно может не так сформулирую, но я постараюсь. Так имеем приложение на андроид с двумя кнопками и контейнером отображающий текст.
Приложение что то вроде счётчика, по нажатию на кнопку увеличиваем значение с нуля на еденицу и так далее. Есть кнопка сброса, которая обнуляет значение счётчика. Вот я реализовал это дело вот так :
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat

class MainActivity : AppCompatActivity() {

    private  lateinit var counterText: TextView
    private lateinit var increaseButton: Button
    private lateinit var resetButton: Button
    private var counter: Int = 0



    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContentView(R.layout.activity_main)
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
            insets
        }

        counterText = findViewById(R.id.counterText)
        increaseButton = findViewById(R.id.increaseButton)
        resetButton = findViewById(R.id.resetButton)



        increaseButton.setOnClickListener {
            counterText.text = "${++counter}"
        }

        resetButton.setOnClickListener {
            counter = 0
            counterText.text = "${this.counter}"
        }
    }
 }


Вроде с самим счётчиком всё понятно, определил переменную присвоил значение по нажатию плюсуем по 1.
А вот с кнопкой сброса... получается я переопределяю значение переменной и вывожу его. Но я так думаю, что это можно сделать как то иначе, вот в принципе и вопрос как это можно реализовать проще?

Второй вопрос про переменные, получается у нас есть две разные переменные одного типа ( кнопка) , их же по идее можно группировать ? определить и вывести в одну строку? Если да то как.

Ну и последний вопрос в чем разница между
resetButton.setOnClickListener {
            counter = 0
            counterText.text = "${this.counter}"
        }

и вот этим кодом
resetButton.setOnClickListener {
            counter = 0
            counterText.text = ("$counter")
        }

Компилятор не ругается в обоих случаях, приложение функционирует без ошибок. Хотелось бы знать как правильнее это сделать. Спасибо всем заранее , кто подскажет.
  • Вопрос задан
  • 184 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Juranja Автор вопроса
Спустя какое-то время разобрался .... Упростил .. получилось следующее:
increaseButton.setOnClickListener {
            counter++
            updateCounterText()
          }

        decreaseButton.setOnClickListener {
            counter--
            updateCounterText()
        }

        resetButton.setOnClickListener {
            if (counter == 0) {
                updateCounterText()
                Toast.makeText(applicationContext, "Кнопка уже была нажата", Toast.LENGTH_SHORT).show()


            }
            else {
                counter = 0
                updateCounterText()
                Toast.makeText(applicationContext, "Счётчик сброшен", Toast.LENGTH_SHORT).show()
                 
            }
        }

  }



    private fun updateCounterText() {
        val counterText = findViewById<TextView>(R.id.counterText)
        counterText.text = counter.toString()
    }


С остальным тоже разобрался.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы