Можно ли увеличить число, являющееся частью идентификатора EditText, с помощью циклов, чтобы создать более короткий код в Kotlin? - PullRequest
0 голосов
/ 14 марта 2020

Я новичок в программировании. Я знаю о Kotlin , в то время как циклы и для циклов , но я недостаточно осведомлен, чтобы манипулировать строками. Интересно, можно ли сократить мой код ниже, используя Loops . Спасибо.

Он состоит из 3 b блоков с 3 p частями в каждом. Мой код должен проверить, является ли TextView пустым, иначе он будет sh. Вот почему я проверяю для каждого отдельного EditText , чтобы проверить, если он пуст на оригинальный идентификатор , но я не могу этого сделать.

Можно ли использовать для циклов для замены числа в b1p1 а затем преобразовать его обратно в TextView ?

if (b1p1.text.isNotEmpty()) {
    if (b2p1.text.isNotEmpty()) {
        if (b3p1.text.isNotEmpty()) {

            var palm1 = b1p1.text.toString().toInt() + b2p1.text.toString().toInt() + b3p1.text.toString().toInt()
            total1.text = palm1.toString()

        } else
            Toast.makeText(
            activity,"b3p1 is blank",
            Toast.LENGTH_SHORT).show()
    } else
        Toast.makeText(
        activity,"b2p1 is blank",
        Toast.LENGTH_SHORT).show()
} else
    Toast.makeText(
    activity,"b1p1 is blank",
    Toast.LENGTH_SHORT).show()

if (b1p2.text.isNotEmpty()) {
    if (b2p2.text.isNotEmpty()) {
        if (b3p2.text.isNotEmpty()) {

            var palm2 = b1p2.text.toString().toInt() + b2p2.text.toString().toInt() + b3p2.text.toString().toInt()
            total2.text = palm2.toString()
        } else
            Toast.makeText(
            activity,"b3p2 is blank",
            Toast.LENGTH_SHORT).show()
    } else
        Toast.makeText(
        activity,"b2p2 is blank",
        Toast.LENGTH_SHORT).show()
} else
    Toast.makeText(
    activity,"b1p2 is blank",
    Toast.LENGTH_SHORT).show()


if (b1p3.text.isNotEmpty()) {
    if (b2p3.text.isNotEmpty()) {
        if (b3p3.text.isNotEmpty()) {

            var palm3 = b1p3.text.toString().toInt() + b2p3.text.toString().toInt() + b3p3.text.toString().toInt()
            total3.text = palm3.toString()

        } else
            activity,"b3p3 is blank",
            Toast.LENGTH_SHORT).show()
    } else
    vToast.makeText(
        activity,"b2p3 is blank",
        Toast.LENGTH_SHORT).show()
} else
    Toast.makeText(
    activity,"b1p3 is blank",
    Toast.LENGTH_SHORT).show()

1 Ответ

0 голосов
/ 14 марта 2020

Для кода, упомянутого в вопросе, вам не требуется циклов для итерации или поиска представлений EditText путем ручной итерации по идентификаторам. Вместо этого вы можете сделать что-то вроде этого:

    private fun viewIteration(){
        val editTextList = ArrayList<EditText> ()
        b1p1.tag = "b1p1"
        editTextList.add(b1p1)
        b2p1.tag = "b2p1"
        editTextList.add(b2p1)
        b3p1.tag = "b2p1"
        editTextList.add(b3p1)

        if(b1p1.text.isNotEmpty() && b2p1.text.isNotEmpty() && b3p1.text.isNotEmpty()){
            // Your code goes here
        } else{
            for(editText in editTextList){
                if(editText.text.isNotEmpty()){
                    Toast.makeText(this,"${editText.tag} is blank",Toast.LENGTH_SHORT).show()
                }
            }
        }
    }

Здесь вы создаете ArrayList видов и помечаете их. А для l oop требуется, когда ваше основное условие не выполняется. т.е. ни одно из трех представлений EditText не имеет текста. В этом случае код будет проходить через ваши представления и выдавать сообщения-тосты для представлений EditText, которые не содержат текст.

Это один из способов сократить код, если вы все же хотите итерировать вручную. через ваши идентификаторы представлений используйте этот метод:

    private fun getEditTextById(id: String) : EditText{
        return findViewById<EditText>(resources.getIdentifier("b${id}p1","id",packageName))
    }

Этот метод принимает идентификатор в качестве строки и использует его для создания имени идентификатора, в этом случае "b {n} p1", он найдет ресурс и вернуть его как представление EditText.

...