小编Hus*_*ain的帖子

根据 Kotlin 中的条件将列表拆分为连续元素组

我正在尝试根据某种类型以及它们是否按顺序对列表进行分组

data class Item(val type: Int, val name: String)

private fun splitItems(items: List<Item>): List<List<Item>> {
    val groupedItems = mutableListOf<List<Item>>()
    var tempList = mutableListOf<Item>()
    items.mapIndexed { index, item ->
        if (index > 0) {
            val previousItem = items[index - 1]
            if (previousItem.type == item.type) {
                tempList.add(item)
            } else {
                if (tempList.isNotEmpty()) groupedItems.add(tempList)
                tempList = mutableListOf()
                tempList.add(item)
            }
        } else tempList.add(item)
    }
    if (tempList.isNotEmpty()) groupedItems.add(tempList)
    return groupedItems
}
Run Code Online (Sandbox Code Playgroud)

现在这个乐趣将需要

val items = mutableListOf(
    Item(1, "Shirt"),
    Item(1, "Shirt"),
    Item(2, "Pant"),
    Item(2, "Pant"),
    Item(2, …
Run Code Online (Sandbox Code Playgroud)

kotlin

6
推荐指数
1
解决办法
4611
查看次数

在 Fragment 中获取与 Activity 中定义的 ViewModel 相同的实例

所以,我用于Koin依赖注入,这是我在活动中所做的

class ModuleDetailActivity : AppCompatActivity() {

    private lateinit var moduleId:String
    private lateinit var levelModule:Level.Module

    private val moduleViewModel: ModuleViewModel by viewModel { parameterOf(moduleId, levelModule) }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        ...
        ...

        moduleId = intent.getString("module_id")
        levelModule = intent.getParcelable("level_module")

        ...
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我有多个ModuleDetailActivity可以添加或替换的片段,并且我希望在这些片段中使用相同的实例,moduleViewModel而不在内部传递任何参数Fragment

class ModuleDetailFragment : Fragment() {

    private val moduleViewModel: ModuleViewModel by sharedViewModel()

    ...
    ...
}
Run Code Online (Sandbox Code Playgroud)

我知道这会引发错误,正如预期的那样,您可以看到这个

Caused by: org.koin.core.error.InstanceCreationException: Could not create instance for [Factory:'****.ui.module.ModuleViewModel']
Run Code Online (Sandbox Code Playgroud)

这就是我初始化模块的方式

val viewModelModule = module …
Run Code Online (Sandbox Code Playgroud)

android viewmodel kotlin koin

5
推荐指数
2
解决办法
5224
查看次数

在 Kotlin 中将列表中的项目彼此配对

我想将列表中的项目彼此配对

例子

list("A","B","C") to -> list(Pair(A,B),Pair(A,C),Pair(B,C))

list("A","B","C","D") to -> list(Pair(A,B),Pair(A,C),Pair(A,D),Pair(B,C),Pair(B,D),Pair(C,D))
Run Code Online (Sandbox Code Playgroud)

我尝试过使用zipWithNext,但它对我的事业没有帮助。如果有人可以告诉我如何实现这一目标?

kotlin

4
推荐指数
1
解决办法
1910
查看次数

标签 统计

kotlin ×3

android ×1

koin ×1

viewmodel ×1