我有一個編輯文本串列。我遍歷它們并檢查它們是否有文本,如果有,我讓它們可見。有一個警告,即使串列中沒有文本,我也需要顯示串列中的下一個編輯文本。是否可以訪問回圈中的下一個元素并使其可見?
例如,如果我有 5 個編輯文本并且 et 1 -> 3 中有文本,則下面的回圈將使它們可見。但我還需要顯示 et 4,而不是 et 5。只是文本停止后的那個。
lifecycleScope.launch(Dispatchers.Default) {
val etList = createEditTextList()
etList.forEach { item ->
withContext(Dispatchers.Main) {
if (!item.text.isNullOrEmpty()) {
item.visibility = View.VISIBLE
}
}
}
private fun createEditTextList(): List<EditText> {
with(binding) {
return listOf(
etChallenges1,
etChallenges2,
etChallenges3,
etChallenges4,
etChallenges5,
etChallenges6,
etChallenges7,
etChallenges8,
etChallenges9,
etChallenges10
)
}
}
uj5u.com熱心網友回復:
首先,我建議您避免在頂級協程中呼叫阻塞函式。如果你做成createEditTextList()一個掛起函式,像這樣:
private suspend fun createEditTextList() = withContext(Dispatchers.Default) {
//...
}
那么你上面的代碼可以簡化為:
lifecycleScope.launch {
val etList = createEditTextList()
etList.forEach { item ->
if (!item.text.isNullOrEmpty()) {
item.visibility = View.VISIBLE
}
}
}
為了能夠處理下一項,請在索引上使用傳統的 for 回圈:
lifecycleScope.launch {
val etList = createEditTextList()
for (index in etList.indices) {
val item = etList[index]
if (!item.text.isNullOrEmpty()) {
item.visibility = View.VISIBLE
if (index 1 < etList.size) {
etList[index 1].visibility = View.VISIBLE
}
}
}
}
uj5u.com熱心網友回復:
我認為您執行協程的方式和您正在處理的實際物件除了您的問題之外,它們是額外的資訊。
如果我們只假設一個簡單的物件,例如:
data class MyClass(
val text: String,
var visible: Boolean
)
由于我們有一個串列,我們可以簡單地使用windowed。這將以您想要的任何形式對元素進行分組,并采取您想要的任何步驟。所以像這樣簡單的事情應該可以作業:
val list = listOf(
MyClass("a", false),
MyClass("b", false),
MyClass("", false),
MyClass("", false),
MyClass("e", false)
)
list.windowed(size = 2, step = 1, partialWindows = true)
.forEach { window: List<MyClass> ->
val first = window.first()
val second = window.last()
if (first.text.isNotBlank()) {
first.visible = true
second.visible = true
}
}
println(list)
結果將是:
[
MyClass(text=a, visible=true),
MyClass(text=b, visible=true),
MyClass(text=, visible=true),
MyClass(text=, visible=false),
MyClass(text=e, visible=true)
]
我們需要設定partialWindows為 true,否則如果我們有奇數個元素,那么最后一個元素將不是任何組中的“第一個”。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/411493.html
標籤:
