Kotlin:输入13个数字时将焦点设置到其他edittext字段

时间:2019-07-16 12:48:50

标签: android kotlin

首先,我想说我是编程和Kotlin的新手,我现在只试用了3天,并且完全没有经验,只是阅读了一下。

我有一个带条形码扫描仪的android设备。我进行了一个活动,其中包含2个edittext字段和一个按钮。在第一个edittextfield(etbc)中,我使用设备扫描条形码,因此其中有一个13位数字。在该字段旁边,还有另一个字段etqty,用于输入数量。

在第一个字段中输入13位数字时,我试图让程序自动将焦点设置为etqty。

我已经尽力了,但是我并没有得到任何结果。我该怎么做,还是必须使用另一种方法?

这是我现在拥有的代码(请记住,我对此绝对是新手,所以我的代码可能有点怪异和混乱,但是现在它可以实现我想要的功能了:-))< / p>

    package com.example.project016

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import java.io.BufferedReader
import java.io.IOException
import java.io .InputStreamReader
import android.widget.Toast
import android.app.Activity
import java.io.OutputStreamWriter
import java.nio.file.StandardOpenOption

class MainActivity: AppCompatActivity () {

    override fun onCreate (savedInstanceState: Bundle?) {
        super.onCreate (savedInstanceState)
        setContentView (R.layout.activity_main)
        val etbc = findViewById (R.id.etbc) as EditText
        val et1 = findViewById (R.id.et1) as EditText
        val etqty = findViewById (R.id.etqty) as EditText

        etbc.requestFocus()
        if(fileList().contains("notes.txt")) {
            try {
                val file = InputStreamReader(openFileInput("notes.txt"))
                val br = BufferedReader(file)
                var line = br.readLine()
                val all = StringBuilder()
                while (line != null) {
                    all.append(line + "\n")
                    line = br.readLine()
                }
                br.close()
                file.close()
                et1.setText(all)
            }
            catch (e:IOException) {
            }
        }

        val button1 = findViewById (R.id.button1) as Button
        button1.setOnClickListener {
            try {
                val file = OutputStreamWriter(openFileOutput("notes.txt", Activity.MODE_APPEND))

                file.write (etbc.text.toString() + ";" + etqty.text.toString() + "\n")
                file.flush ()
                file.close ()
            } catch (e : IOException) {
            }
            Toast.makeText(this, "data were recorded", Toast.LENGTH_SHORT).show()
           // finish ()
            etbc.getText().clear()
            etqty.getText().clear()
    }
}

1 个答案:

答案 0 :(得分:2)

您可以做的是观看在第一个字段中输入的文本。

您可以使用TextWatcher例如

        etbc.addTextChangedListener(object : TextWatcher {
            override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {}

            override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}

            override fun afterTextChanged(s: Editable) {
                if(etbc.text.length > 12) {
                    etqty.requestFocus()
                }
            }
        })

尝试一下。 顺便说一句。您还可以在xml中设置android:maxLength="13"