【问题标题】:Plus and minus button with EditText带有 EditText 的加号和减号按钮
【发布时间】:2019-06-22 15:14:53
【问题描述】:

我有一个正常工作的递增和递减按钮。但我需要我也可以使用 EdidText 手动输入值。

我的代码如下:

Activity.tk

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Button
import android.widget.TextView

class MainActivity : AppCompatActivity() {
    internal var minteger = 0
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)


        val plus = findViewById<Button>(R.id.increase)
        val minus = findViewById<Button>(R.id.decrease)

        plus.setOnClickListener {

            increaseInteger(plus)
        }



        minus.setOnClickListener {

            decreaseInteger(minus)
        }
    }

    fun increaseInteger(view: View) {
        minteger += 1
        display(minteger)

    }

    fun decreaseInteger(view: View) {
        minteger -= 1
        display(minteger)
    }

    private fun display(number: Int) {
        val displayInteger = findViewById<View>(
                R.id.integer_number) as TextView
        displayInteger.text = "" + number
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="16dp"
    android:gravity="center_horizontal"
    android:orientation="vertical"
    tools:context=".MainActivity">



    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="56dp"
        android:orientation="horizontal">

        <Button
            android:id="@+id/decrease"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="-" />

        <TextView
            android:id="@+id/integer_number"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="16dp"
            android:layout_marginLeft="40dp"
            android:layout_marginRight="40dp"
            android:layout_marginTop="16dp"
            android:text="0"
            android:textStyle="bold"
            android:textSize="70sp" />

        <Button
            android:id="@+id/increase"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="+" />
    </LinearLayout>


</LinearLayout>

我已将 TextView 更改为 EditText (@+id/integer_number)

但是当我输入一个未保存的值时,我找不到办法让在 EdidText 中输入的值被保存,以便我可以增加或减少它。

我将不胜感激任何能够操作我的按钮的建议。

【问题讨论】:

    标签: android kotlin android-button


    【解决方案1】:

    在您的 xml 中更改为 EditText:

    <EditText
        android:id="@+id/integer_number"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="16dp"
        android:layout_marginLeft="40dp"
        android:layout_marginRight="40dp"
        android:layout_marginTop="16dp"
        android:text="0"
        android:inputType="number"
        android:textStyle="bold"
        android:textSize="70sp" />
    

    我添加了属性:

    android:inputType="number"
    

    所以只允许使用数字。
    在您的 MainActivity 类中添加此导入:

    import kotlinx.android.synthetic.main.activity_main.*
    

    因此您无需findViewById()即可访问xml的所有项目。
    现在您无需将EditText 的值保存在任何地方,因为您可以随时通过以下方式获取它:

    integer_number.text.toString().toInt()
    

    因此不再需要变量 minteger
    将活动的代码更改为:

    import android.os.Bundle
    import android.support.v7.app.AppCompatActivity
    import kotlinx.android.synthetic.main.activity_main.*
    
    class MainActivity : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            increase.setOnClickListener { increaseInteger() }
            decrease.setOnClickListener { decreaseInteger() }
        }
    
        fun increaseInteger() {
            display(integer_number.text.toString().toInt() + 1)
        }
    
        fun decreaseInteger() {
            display(integer_number.text.toString().toInt() - 1)
        }
    
        private fun display(number: Int) {
            integer_number.setText("$number")
        }
    }
    

    我也做了其他简化。
    increaseInteger()decreaseInteger() 函数不需要任何参数。
    最大和最小整数值有限制。
    因此,如果您想安全起见,还必须在 increaseInteger()decreaseInteger() 内使用 try/catch 块以避免异常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-30
      • 2019-01-25
      • 2019-01-10
      相关资源
      最近更新 更多