Во-первых, я хочу сказать, что я совершенно новичок в программировании и 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()
}
}
Что вы можете сделать, так это посмотреть текст, который вводится в первое поле.
Вы можете использовать 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