作为EditText id一部分的数字是否可以使用循环来在Kotlin中创建较短的代码



我是编程新手。我知道Kotlin的While LoopsFor Loops但我的知识不足以操作字符串。我想知道下面的代码是否可以使用循环来缩短。谢谢

它由3个b块组成,每个块有3个
p部分。我的代码需要检查TextView是否为空,否则它将崩溃。这就是为什么我要检查每个EditText来检查它是否为空。

我曾想过分离EditText id的数字部分,并在将其连接到原始id之前将其递增,但我似乎无法做到。

是否可以将用于循环来替换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()

对于问题中提到的代码,您不需要循环通过ID手动迭代来迭代或查找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并对其进行标记。如果不满足主要条件,则需要for循环。即三个EditText视图中的任何一个都没有文本。在这种情况下,代码将在视图中循环,并为不包含文本的EditText视图生成Toast消息。

这是缩短代码的一种方法,但如果您仍然想手动迭代视图标识符,请使用以下方法:

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

此方法将id作为String,并使用它来构造标识符名称,在本例中为"b{n}p1",它会找到资源并将其作为EditText视图返回。

最新更新