Сбросить значение раскрывающегося меню и сделать его пустой строкойAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Сбросить значение раскрывающегося меню и сделать его пустой строкой

Сообщение Anonymous »

Я хочу сбросить значение и сделать его пустой строкой при выборе нового местоположения.
Я попробовал сбросить значение следующим образом:
* *tower.value = ""
floorNumber.value = ""**
но на стороне пользовательского интерфейса значение остается**Это раскрывающееся меню
**
@Composable
fun DropDownBox(
items:List,
onItemSelected: (String) -> Unit,
textFieldLabel:String,
modifier: Modifier = Modifier,
) {
var expanded by remember { mutableStateOf(false) }
var selectedText by remember { mutableStateOf("") }

var textfieldSize by remember { mutableStateOf(Size.Zero) }

val icon = if (expanded)
Icons.Filled.ArrowDropUp //it requires androidx.compose.material:material-icons-extended
else
Icons.Filled.ArrowDropDown

Log.d("select", "$selectedText")
Column() {
OutlinedTextField(
textStyle = TextStyle(
fontFamily = mont,
color = Color.Black),
shape = RoundedCornerShape(15.dp),
value = selectedText,
onValueChange = {
selectedText = it },
modifier = Modifier
.fillMaxWidth()
.onGloballyPositioned { coordinates ->
//This value is used to assign to the DropDown the same width
textfieldSize = coordinates.size.toSize()
},
label ={ Text(textFieldLabel,
fontSize = 15.sp,
fontWeight = FontWeight.Normal,
fontFamily = mont
)
},
trailingIcon = {
Icon(icon,"contentDescription",
Modifier.clickable { expanded = !expanded })
},
readOnly = true,
)
DropdownMenu(
expanded = expanded,
onDismissRequest = { expanded = false },
modifier = Modifier
.width(with(LocalDensity.current){textfieldSize.width.toDp()})
) {
items.sorted().forEach { label ->
DropdownMenuItem(onClick = {
selectedText = label
onItemSelected(selectedText)
expanded = false
}) {
Text(text = label,
fontSize = 15.sp,
fontWeight = FontWeight.Normal,
fontFamily = mont
)
}
}
}
}
}

У меня есть раскрывающийся список для местоположения, башни и номера этажа. Я хочу, чтобы, если я выберу новое местоположение, значение номера башни и этажа будет сброшено до пустой строки. Я уже пробовал этот код, но единственное изменение — это значение, а не сам пользовательский интерфейс. поэтому я пытаюсь отладить этот код, пожалуйста, помогите мне с моим кодом
var isLocationSelected by remember { mutableStateOf(false) }

var isTowerSelected by remember { mutableStateOf(false) }

var isFloorSelected by remember { mutableStateOf(false) }

Log.d("LOCATION", "$location")
DropdownTextField(
items = locationsMap.map {
it.key
},
onItemSelected = {
if (locationErrorState.value) {
locationErrorState.value = false
}
location.value = it

isLocationSelected = true

isTowerSelected = false
isFloorSelected = false

tower.value = ""
floorNumber.value = ""
unitNumber.value = ""
unitNumberSuffx.value = ""

/* Populate towers dropdown list */
var towersList:MutableList = ArrayList()
towers.value = towersList

var suffixList:MutableList = ArrayList()
suffix.value = suffixList

val building = locationsMap[location.value]
building?.let {
it.map {
it.towerName?.let {
towersList.add(it)
}

it.unitNumberSuffix.let {
it?.let {
it.map {
suffixList.add(it)
}
}
}
}
}

if (!towersList.isEmpty()) {
towers.value = towersList
} else {
building?.let {
val maxFloorNumber = it.first().floorNumber
val maxUnit = it.first().unitsPerFloor

var unitList: MutableList = ArrayList()
var floorsList: MutableList = ArrayList()

for (n in 1..maxFloorNumber.toInt()) {
floorsList.add(n.toString())
}

for (n in 1..maxUnit) {
// Add "0" in the middle for unit numbers 1-9
val formattedUnit = if (n in 1..9) "0$n" else n.toString()
unitList.add(formattedUnit)
}

unitNumbers.value = unitList
floors.value = floorsList
}
}

if (!suffixList.isEmpty()) {
suffix.value = suffixList.distinct()
}

},
textFieldLabel = "Location",
)

Log.d("TOWER", "$tower")
if (isLocationSelected && towers.value.count() >= 1) {
Spacer(modifier = Modifier.height(8.dp))
DropdownTextField(items = towers.value,
onItemSelected = {
if (towerErrorState.value) {
towerErrorState.value = true
}
tower.value = it

isTowerSelected = true

isFloorSelected = false
floorNumber.value = ""

/*
Update floors
*/
val building = locationsMap[location.value]
building?.let {
it.map {
if (it.towerName == tower.value) {
val maxFloorNumber = it.floorNumber
val maxUnit = it.unitsPerFloor

var unitList:MutableList = ArrayList()
var floorsList:MutableList = ArrayList()
for(n in 1..maxFloorNumber.toInt()) {
floorsList.add(n.toString())
}
for (n in 1..maxUnit) {
// Add "0" in the middle for unit numbers 1-9
val formattedUnit = if (n in 1..9) "0$n" else n.toString()
unitList.add(formattedUnit)
}
unitNumbers.value = unitList
floors.value = floorsList
}
}

}
},
textFieldLabel = "Tower",
)
}

Spacer(modifier = Modifier.height(8.dp))

Log.d("FLOOR", "$floorNumber")
if (isLocationSelected || isTowerSelected) {
DropDownBox(
items = floors.value,
onItemSelected = {
if (floorNumberErrorState.value) {
floorNumberErrorState.value = false
}
Log.d("TEST", "$it")
floorNumber.value = it
isFloorSelected = true

unitNumber.value = ""

},
textFieldLabel = stringResource(R.string.FloorNumber),

)
}


Подробнее здесь: https://stackoverflow.com/questions/781 ... pty-string
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»