You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅使用一个LiveData列表承载实现相同接口的不同类实例

可行实现方案如下,这是目前最优的处理方式:

1. 首先修改ViewModel逻辑,新增按类型加载过滤列表的方法

你可以选择是否缓存已加载的列表:如果需要保留用户在不同过滤器类型下的选中状态,就加缓存逻辑;不需要的话可以去掉缓存,每次直接生成新列表即可。

// 可选:添加类型限定注解,避免传参错误
@IntDef(SKILLS, PROJECTS)
@Retention(AnnotationRetention.SOURCE)
annotation class FilterType

class FilterViewModel : ViewModel() {
    // 可选:缓存不同类型的过滤列表,保留选中状态
    private val filterCache = mutableMapOf<Int, List<FilterItem>>()

    private val _filterList = MutableLiveData<List<FilterItem>>()
    val filterList: LiveData<List<FilterItem>> = _filterList

    // 对外暴露的加载方法,根据传入的类型返回对应的过滤列表
    fun loadFilterList(@FilterType type: Int) {
        viewModelScope.launch {
            _filterList.value = filterCache.getOrPut(type) {
                when (type) {
                    SKILLS -> loadSkills()
                    PROJECTS -> loadProjects()
                    else -> emptyList()
                }
            }
        }
    }

    // 原有的loadSkills、loadProjects方法保留即可
    private fun loadSkills(): MutableList<FilterItem> {
        val technologiesList: MutableList<FilterItem> = mutableListOf()
        technologiesList.add(Technology("1", "Android"))
        technologiesList.add(Technology("2", "Kotlin"))
        return technologiesList
    }

    private fun loadProjects(): MutableList<FilterItem> {
        val projectsList: MutableList<FilterItem> = mutableListOf()
        projectsList.add(Project("1", "Project 1"))
        projectsList.add(Project("2", "Project 2"))
        return projectsList
    }
}

2. 修改UI层的点击逻辑,调用上述方法切换列表

showSkillsButton.setOnClickListener {
    filterViewModel.loadFilterList(SKILLS)
    showFilterModal(filterViewModel.filterList, SKILLS)
}
showProjectsButton.setOnClickListener {
    filterViewModel.loadFilterList(PROJECTS)
    showFilterModal(filterViewModel.filterList, PROJECTS)
}

注意事项

如果你的列表数据是从网络/数据库异步加载的,建议在UI层观察filterList的变化,收到新数据后再弹出BottomSheetDialog,避免弹窗显示后数据还没更新的问题。


内容的提问来源于stack exchange,提问作者Ciprian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 14:39:05