Kotlinアプリ開発 vol.1-3 EditTextの値をボタンで変える

RM計算機

RM計算アプリのベンチマーク

ダウンロード数の多そうなRM計算アプリを漁ってみた。

こ れ が や り た い

1 Rep Max Calculator and Log - Apps on Google Play
Watch your Strength Grow

いままではTextViewのtextを変えていたが、今回はEditTextのtextを変更する

edittextの数値を変えるアプリを作る

基本動作を考える

まず参考にしたものは以下。

【UIチュートリアル】カウントアップアプリを作る
Androidアプリ開発のUIスキルを集めて、カウントアップアプリ作成のチュートリアルにしました。 UIを作れるようになりたい方におすすめです!
        val textView = findViewById<TextView>(R.id.count_text) // TextViewを取得
        button.setOnClickListener {
            count += 1
            textView.text = count.toString() // textにcountを代入
        } 

ボタンが押されるたびに、ID:count_textのTextViewを探してきて、1足したものに置き換えるという動作をしている

テストアプリを作ってみる

だいたいのジムには2.5kg刻みくらいまでしかウエイトがないので、以下のようなデザインにした。

動 か な い 

        val button1 = findViewById<Button>(R.id.b_minus)
        button1.setOnClickListener {

            val get_weight = findViewById<EditText>(R.id.e_weight)
            val st_weight = get_weight.text.toString()
            val countdown = st_weight.toDouble() - 2.5
            get_weight.text = getString(R.string.get_weight, countdown)
        }
やろうとしたこと
  • IDがb_minusというボタンを見つけてくる
  • ボタンが押されたときの動作を設定する
  • IDがe_weghtというEditTextを見つけてくる
  • 中身を文字列(String)に変換する
  • 中身を小数(Double)に変換して 2.5を引く
  • 値を文字列に変換して、テキストとして代入する

一番下がうまくいっていない。

StringになっているけどEditableじゃないとダメだよ!と言われている。

EditTextはEditableという型なので、決まった文字列を代入できない。

※ボタンが押されなくても、ユーザー側で数値の入力ができないといけない

Kotlin側で取得した値を、EditTextのtextにセットしたい|teratail
Kotlin側で取得した値を、EditTextのtextに挿入したいのですが、うまくいきません。 環境AndroidStudio3.0.1Kotlin1.1.15fuel 試したことtest.kt URL.httpGet().header().responseObject(Item) { re

同じような悩みを持つ人を見つけた。

        val button1 = findViewById<Button>(R.id.b_minus)
        button1.setOnClickListener {

            val get_weight = findViewById<EditText>(R.id.e_weight)
            val st_weight = get_weight.text.toString()
            val countdown = st_weight.toDouble() - 2.5
            val countdownn = countdown.toString()
            get_weight.setText(countdownn, TextView.BufferType.EDITABLE)
        }

私も解決しました。

テストアプリが完成

動作を載せておきます。

Edittextの値をボタンで変更

ちなみに初期値は50にしました。

        val get_weight = findViewById<EditText>(R.id.e_weight)
        val syoki = 50.0
        val syokichi = syoki.toString()
        get_weight.setText(syokichi, TextView.BufferType.NORMAL)

コードの全文を見る
package com.example.plus_minus_test

import android.os.Bundle
import android.text.Editable
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {

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

        val get_weight = findViewById<EditText>(R.id.e_weight)
        val syoki = 50.0
        val syokichi = syoki.toString()
        get_weight.setText(syokichi, TextView.BufferType.NORMAL)

        val button1 = findViewById<Button>(R.id.b_minus)
        button1.setOnClickListener {

            val get_weight = findViewById<EditText>(R.id.e_weight)
            val st_weight = get_weight.text.toString()
            val countdown = st_weight.toDouble() - 2.5
            val countdownn = countdown.toString()
            get_weight.setText(countdownn, TextView.BufferType.EDITABLE)
        }

        val button2 = findViewById<Button>(R.id.b_plus)
        button2.setOnClickListener {

            val get_weight = findViewById<EditText>(R.id.e_weight)
            val st_weight = get_weight.text.toString()
            val countup = st_weight.toDouble() + 2.5
            val countupp = countup.toString()
            get_weight.setText(countupp, TextView.BufferType.NORMAL)
        }

    }
}

まとめ

EditTextの値をボタンで変更する方法を学んだ。
setText(xxx, TextView.BufferType.yyy)で設定が可能
次回はエラーメッセージの出し方と消し方について考える。

コメント

タイトルとURLをコピーしました