Kotlin Коллекции (сопоставление) пар ключ-значение с EditText - PullRequest
0 голосов
/ 13 июля 2020

Я исхожу из Swift и пытаюсь понять Kotlin.

  1. В iOS у меня был сборщик, который отображал ключи и сохранял значения в @State object

  2. Как я могу использовать EditText, чтобы сделать то же самое, но избежать ошибок, введенных пользователем?

  3. Может ли этот условный оператор быть Enum в Kotlin для других карт / словарей ScoreModel?

    class NewAcftActivity: AppCompatActivity () {

реализовал такую ​​модель, не уверен, что это Kotlin протокол.

private val scoreModel = ScoreModel()

private lateinit var textEditMdl: EditText

игнорировать остальные представления TextEdit, если первое представление решает остальную проблему

private lateinit var textEditSpt: EditText
private lateinit var textEditHrp: EditText
private lateinit var textEditSdc: EditText
private lateinit var textEditLtk: EditText
private lateinit var textEditTmr: EditText

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_new_acft)



    textEditMdl = findViewById(R.id.newAcft_textEdit_mdl)

Другие правки текста ...

    textEditSpt = findViewById(R.id.newAcft_textEdit_spt)
    textEditHrp = findViewById(R.id.newAcft_textEdit_hrp)
    textEditSdc = findViewById(R.id.newAcft_textEdit_sdc)
    textEditLtk = findViewById(R.id.newAcft_textEdit_ltk)
    textEditTmr = findViewById(R.id.newAcft_textEdit_tmr)

    newAcft_btn_save.setOnClickListener {
        calculateMdl(textEditMdl)
    }
}

Здесь возникли проблемы ... Не знаю, как правильно оценить коллекцию карт.

private fun calculateMdl(rawScore: EditText) {
    var key = rawScore

    if (scoreModel.eventMDL.containsKey(key as Double)) {
            newAcft_textView_mdl.text = key.toString()
    }
}

}

модель. это применимо только к первому TextEdit, но обычно одинаково для каждого события

 class ScoreModel {
    val eventMDL = mapOf(
        340.0 to 100.0,
        330.0 to 97.0,
        320.0 to 94.0,
        310.0 to 92.0,
        300.0 to 90.0,
        290.0 to 88.0,
        280.0 to 86.0,
        270.0 to 84.0,
        260.0 to 82.0,
        250.0 to 80.0,
        240.0 to 78.0,
        230.0 to 76.0,
        220.0 to 74.0,
        210.0 to 72.0,
        200.0 to 70.0,
        190.0 to 68.0,
        180.0 to 65.0,
        170.0 to 64.0,
        160.0 to 63.0,
        150.0 to 62.0,
        140.0 to 60.0,
        130.0 to 50.0,
        120.0 to 40.0,
        110.0 to 30.0,
        100.0 to 20.0,
        90.0 to 10.0,
        80.0 to 0.0,
        0.0 to 0.0)
}

1 Ответ

0 голосов
/ 13 июля 2020

rawScore - это EditText, поэтому вы не можете преобразовать его в Double с помощью as, поскольку они не находятся в той же иерархии классов. Вы должны использовать свойство text, чтобы получить текст, введенный пользователем. Затем вы можете безопасно преобразовать текст в Double, используя toDoubleOrNull(). Он вернет null, если строка недопустима для преобразования в Double.

private fun calculateMdl(rawScore: EditText) {
    val key = rawScore.text.toDoubleOrNull()

    if (scoreModel.eventMDL.containsKey(key)) {
            newAcft_textView_mdl.text = key.toString()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...