首页 > 解决方案 > 通过应用栏中的选择进行排序后,如何重新膨胀列表片段

问题描述

我有一个在列表片段中显示得很好的项目列表。但是,我在应用程序栏中添加了一个排序按钮,但我无法让使用的数据显示(或重新膨胀)。

这个片段列表 Kotlin 类成功调用 actionListViewModel.sortActions()

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    return when (item.itemId) {
        R.id.new_action -> {
            val action = Action()
            actionListViewModel.addAction(action)
            callbacks?.onActionSelected(action.id)
            true
        }
        R.id.sort_actions -> {
            actionListViewModel.sortActions()
            true

        }
        else -> return super.onOptionsItemSelected(item)
    }
}

列表视图模型功能:

fun sortActions(){
    actionRepository.getSortedActions()
    Log.d(TAG, "tried to sort")
    // How do I redisplay?

}

我的存储库代码:

有趣的 getSortedActions(): LiveData<List> = actionDao.getSortedActions()

我的道代码:

@Query("SELECT * FROM action ORDER BY title")
fun getSortedActions(): LiveData<List<Action>>

标签: androidkotlin

解决方案


我修好了它。

我更新的 sortActions 函数:

有趣的 sortActions(){ actionRepository.getSortedActions()

    if (sortedItems == true) {
        actionListLiveData = actionRepository.getSortedActions()
        sortedItems = false
    }
    else {
        actionListLiveData = actionRepository.getActions()
        sortedItems = true
    }

}

操作存储库代码:

fun getActions(): LiveData<List<Action>> = actionDao.getActions()
fun getSortedActions(): LiveData<List<Action>> = actionDao.getSortedActions()

当然,链接到道:

@Query("SELECT * FROM action ORDER BY dueDate")
fun getActions(): LiveData<List<Action>>

@Query("SELECT * FROM action ORDER BY title")
fun getSortedActions(): LiveData<List<Action>>

在我的片段列表中,我添加了:

fun reInflate() {
    val fragTransaction: FragmentTransaction = this.fragmentManager!!.beginTransaction()
        fragTransaction.detach(this)
        fragTransaction.attach(this)
        fragTransaction.commit()
}

推荐阅读