Kotlin: установить фокус на другое поле edittext при вводе 13 чисел

Во-первых, я хочу сказать, что я совершенно новичок в программировании и Kotlin, я пробую его всего 3 дня, и у меня совсем нет опыта, я просто немного читаю об этом.

У меня есть устройство Android со сканером штрих-кода. Я сделал действие с двумя полями edittext и кнопкой. В первом поле редактирования текста (etbc) я сканирую штрих-код устройством, поэтому в нем появляется 13-значное число. Рядом с этим полем у меня есть еще одно поле, etqty, где я ввожу количество.

Я пытаюсь заставить программу автоматически устанавливать фокус на etqty, когда в первое поле вводится 13-значное число.

Я уже пробовал с длиной, но я действительно не получаю никакого результата. Как я могу это сделать, или мне нужно использовать другой метод?

Это код, который у меня есть на данный момент (имейте в виду, что я абсолютно новичок в этом, поэтому мой код может быть немного странным и запутанным, но пока он делает то, что я хочу:-))

    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()
    }
}
0
0
598
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Что вы можете сделать, так это посмотреть текст, который вводится в первое поле.

Вы можете использовать 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()
                }
            }
        })

Попробуйте. Кстати. вы также можете установить android:maxLength = "13" в xml

Другие вопросы по теме