小编imn*_*imn的帖子

Android Jetpack Compose mutableStateListOf 不进行重组

所以,我有mutableStateListOf一个viewModel

var childTravellersList = mutableStateListOf<TravellersDetails>()
Run Code Online (Sandbox Code Playgroud)

TravellersDetails是一个数据类,有一个名为 的字段error

childTravellersList在 UI 中使用为:

val list = remember{viewModel.childTravellersList}

LazyColumn(state = lazyColumnState) {
    itemsIndexed(list) { index, item ->
        SomeBox(show = if(item.error) true else false)
    }
  }
Run Code Online (Sandbox Code Playgroud)

我在给定的TravellersDetailsviewModel更新中编写了一个函数:errorindexchildTravellersList

fun update(index){
    childTravellersList[index].error = true
}
Run Code Online (Sandbox Code Playgroud)

因此,每当我调用此函数时,列表都应该更新。

这会更新列表,但不会触发 UI 重组。我哪里做错了?

android kotlin android-jetpack android-jetpack-compose

29
推荐指数
1
解决办法
3万
查看次数

如何在Jetpack Compose中做Multiline芯片组?

如何在 Jetpack compose 中获得这样的布局?

因此,我创建了一个 Chip 可组合项并在 LazyRow 中使用它,如下所示:

LazyRow(
        modifier = modifier,
        horizontalArrangement = Arrangement.spacedBy(16.dp),
    ){
   items.forEach { it ->
            item {
                CustomChip(
                    item = it,
                    isSelected = it == currentItem,
                    onItemChanged = {
                        onItemChanged(it)
                    }
                )
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

但是,我想获得像上面提到的图像这样的布局。即,如果筹码数量到达屏幕末尾,则新筹码应排在新行中。

android kotlin android-jetpack-compose

17
推荐指数
1
解决办法
8292
查看次数

用于自定义对象的 Android 房间类型转换器

我在 Room 中使用自定义对象列表时遇到错误。

error: Cannot figure out how to save this field into database. You can consider adding a type converter for it.
Run Code Online (Sandbox Code Playgroud)

所以我的数据类是这样的:

@Entity(tableName = "calorie_daily_table")
data class CalorieDaily(
@PrimaryKey
var date: String,
var breakfast: List<Meal>)

data class Meal(
var foodItem: String,
var foodQuantity: String,
var calorie: Int)
Run Code Online (Sandbox Code Playgroud)

我如何编写一个 TypeConverter 来处理这个问题?

所以,我有这样的事情:

class Converter {

var gson = Gson()

@TypeConverter
fun foodItemToString(foodItems: List<FoodItem>): String {
    return gson.toJson(foodItems)
}

@TypeConverter
fun stringToFoodItem(data: String): List<FoodItem> {
    val listType = object : …
Run Code Online (Sandbox Code Playgroud)

java android kotlin android-room

7
推荐指数
1
解决办法
3558
查看次数

如何正确使用 StateFlow 和 Jetpack compose?

我正在 ViewModel 中进行 API 调用,并在可组合项中观察它,如下所示:

class FancyViewModel(): ViewModel(){
 private val _someUIState =
     MutableStateFlow<FancyWrapper>(FancyWrapper.Nothing)
 val someUIState: StateFlow<FancyWrapper> =
     _someUIState

 fun attemptAPICall() = viewModelScope.launch {
  _someUIState.value = FancyWrapper.Loading
  when(val res = doAPICall()){
   is APIWrapper.Success -> _someUIState.value = FancyWrapper.Loading(res.vaue.data)
   is APIWrapper.Error -> _someUIState.value = FancyWrapper.Error("Error!")
  }
 }
}
Run Code Online (Sandbox Code Playgroud)

在可组合项中,我正在听“someUIState”,如下所示:

@Composable
fun FancyUI(viewModel: FancyViewModel){

 val showProgress by remember {
    mutableStateOf(false)
 }
 val openDialog = remember { mutableStateOf(false) }

 val someUIState =
    viewModel.someUIState.collectAsState()
 
 when(val res = someUIState.value){
  is FancyWrapper.Loading-> showProgress = true
  is FancyWrapper.Success-> { …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-jetpack android-jetpack-compose kotlin-stateflow

6
推荐指数
2
解决办法
6797
查看次数