@ykondo461203

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Kotlin言語のAndroidアプリで、テキストボックス及びボタンのプロパティ(IsEnabled)がうまく動作致しません。

解決したいこと

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

発生している問題・エラー

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

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

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

image.png

以下ソースコードのprivate val receiver by lazy関数内の
editTextNumber1.text.clear()
(editTextNumber4 as TextView).text = "1"
(editTextNumber1 as TextView).text = dataList[4]
(editTextNumber2 as TextView).text = width
は動作しますが、
editTextNumber1.isEnabled = true
button.isEnabled = false
button.isEnabled = true
がうまく動作しません。

該当するソースコード

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 likes

1Answer

Comments

  1. @ykondo461203

    Questioner

    ありがとうございました。
    おっしゃる通り、if文における凡ミスでした。
    全く気付かず、お恥ずかしい限りです。
    when文に書き換え、目的通りに動作させることができました。
    @nak435様、感謝致します。

Your answer might help someone💌