kotlinで作成したandroid端末で動くSCANアプリです。入力間違いを防止する為、スキャンごとに入力項目(テキストボックス)のプロパティを変更したい。

実現したいこと

ハンディースキャナーで読み取ったデータの種類毎に、入力制限を設けたいので、テキストボックスのEnabledを変更したい。

前提

以下の画像の[L,W,取数]のテキストボックスのenabledをハンディースキャナーで読み取ったデータの種類毎に変更したい。

単位が「m3」または「石」のものは、[L,W]のテキストボックスのIsEnabledを『true』、[取数]のテキストボックスのIsEnabledを『false』
単位が上記以外のものは、[L,W]のテキストボックスのIsEnabledを『false』、[取数]のテキストボックスのIsEnabledを『true』

アプリを立ち上げて、最初に読み込んだ場合は、商品の種類によって、IsEnabledの状態がきちんと意図通りになるのですが、
2回目以降は、IsEnabledの状態が変化せず、ずっと一番最初に読み込んだ商品の種類によって決定されたIsEnabledの状態が続く。イメージ説明

ソース
kotlin 文字数制限により、問題に関係のない部分は割愛致しました。
コード
package com.example.inventory2023

class MainActivity : AppCompatActivity() {

private var barcodeDataCopy: String? = "" private val itemArray = arrayOf( "登録番号", "品目", "商品番号", "品名", "L", "樹種", "原産地", "仕入先", "入荷日", "入荷数", "入荷材積数", "単位" ) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // ボタン不能化 val button: Button = findViewById(R.id.button) button.isEnabled = false // Scan開始部 thread(start = true) { try { startScanService() Thread.sleep(500) // USS の開始を 500 ミリ秒以上待機します closetScanToKey() } catch (e: InterruptedException) { e.printStackTrace() } } } // Unitech部 private val filter by lazy { IntentFilter().apply { addAction("unitech.scanservice.data") } } private val receiver by lazy { object : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { intent ?: return if (intent.action.equals("unitech.scanservice.data")) { val barcodeData = intent.getStringExtra("text") barcodeDataCopy = barcodeData // 表示初期化 val editTextNumber1: EditText = findViewById(R.id.editTextNumberDecimal1) editTextNumber1.text.clear() editTextNumber1.isEnabled = true val editTextNumber2: EditText = findViewById(R.id.editTextNumberDecimal2) editTextNumber2.text.clear() editTextNumber2.isEnabled = true val editTextNumber3: EditText = findViewById(R.id.editTextNumber1) editTextNumber3.text.clear() val editTextNumber4: EditText = findViewById(R.id.editTextNumber2) (editTextNumber4 as TextView).text = "1" editTextNumber4.isEnabled = true val button: Button = findViewById(R.id.button) button.isEnabled = false // リスト作成部 val list: MutableList<Map<String, String>> = ArrayList() list.clear() val dataList = barcodeData!!.split(",").toMutableList() if (dataList.size != 17) { AlertDialog.Builder(this@MainActivity) .setTitle("読み取りエラー!!") .setMessage("再度Scanしてください。") .setPositiveButton("OK") { _, _ -> } .show() return } val width = dataList[6] dataList.removeAt(16) dataList.removeAt(15) dataList.removeAt(7) dataList.removeAt(6) dataList.removeAt(1) val barcodeDataArray: Array<String> = dataList.toTypedArray() for (i in itemArray.indices) { val data: MutableMap<String, String> = HashMap() data["item"] = itemArray[i] data["barcodeData"] = barcodeDataArray[i] list.add(data) } val listAdapter = SimpleAdapter( applicationContext, list, R.layout.listview, arrayOf<String>("item", "barcodeData"), intArrayOf(R.id.textView1, R.id.textView2) ) val listView = findViewById<ListView>(R.id.listView) listView.adapter = listAdapter (editTextNumber1 as TextView).text = dataList[4] (editTextNumber2 as TextView).text = width if (dataList[11] != "m3" || dataList[11] != "石") { editTextNumber1.isEnabled = false editTextNumber2.isEnabled = false } else { editTextNumber4.isEnabled = false } dataList.clear() val textView5: TextView = findViewById(R.id.textView5) textView5.text = "読取り結果表示" button.isEnabled = true } } } } override fun onResume() { super.onResume() registerReceiver(receiver, filter) } override fun onPause() { super.onPause() unregisterReceiver(receiver) } private fun startScanService() { Intent().also { intent -> intent.setAction("unitech.scanservice.start") sendBroadcast(intent) } } private fun closetScanToKey() { Intent().also { intent -> intent.setAction("unitech.scanservice.scan2key_setting") intent.putExtras(Bundle().apply { putBoolean("scan2key", false) }) sendBroadcast(intent) } }

}

プログラム経験の大変浅い者です。何卒よろしくお願い申し上げます。

コメントを投稿

0 コメント