在 navigationUp 或关闭 DialogFragment 后调用函数

如何解决在 navigationUp 或关闭 DialogFragment 后调用函数

嗨,我在我的应用程序中使用函数 loadExercises() 将数据设置为 recyclerview。对于我的应用程序的每个部分,它都运行良好。但在一个特定的部分,我需要两件特定的事情:

  1. DialogFragment dismiss() 方法后刷新视图。 (我正在该对话框中更新锻炼时间。此方法运行良好,并完成了它应该做的事情。)

  2. navigateUp()调用 AddExercisetoTrainingFragment 后刷新此列表。这个片段是另一个充满练习的回收站视图。单击它会显示 DialogFragment,它将练习添加到训练集的特定时间。这种方法再次有效,但我无法在向上导航后“刷新”列表。

数据存储在 Firebase Cloud Firestore 中。

加载练习的函数(我在 onStart()onResume() 中称之为):

fun loadExercises() {
    trainingsviewmodel.loadExercisesInTraining().observe(viewLifecycleOwner,{ result ->
        binding.result = result
        if (result is Result.Success) {
            adapter.submitList(result.data)
        }
    })
}

来自 viewmodel 的函数 loadExercisesInTraining:

private val coroutineContext = viewmodelScope.coroutineContext + dispatchers.IO

fun loadTrainings(): LiveData<Result<List<Training>>> = liveData(coroutineContext) {
    emit(Result.Loading)

val result = trainingsRepository.getTrainings()

if (result is Result.Success) {
    emit(result)
}

}

回收者视图适配器:

class ExerciseInTrainingAdapter(
    private val onClick: ((ExerciseInTraining) -> Unit)? = null,private val fragment: TrainingDetailFragmentExercises
) : DataBoundlistadapter<ExerciseInTraining,ExerciseInTrainingItembinding>(
    diffCallback = object : DiffUtil.ItemCallback<ExerciseInTraining>() {
        override fun areItemsTheSame(
            oldItem: ExerciseInTraining,newItem: ExerciseInTraining
        ): Boolean {
            return oldItem.id == newItem.id
        }

        override fun areContentsTheSame(
            oldItem: ExerciseInTraining,newItem: ExerciseInTraining
        ): Boolean {
            return oldItem == newItem
        }
    }
) {
    private lateinit var viewmodel: Trainingsviewmodel
    private lateinit var exerciseviewmodel: Exercisesviewmodel

    fun setviewmodel(viewmodel: Trainingsviewmodel) {
        this.viewmodel = viewmodel
    }

    fun setviewmodel(viewmodel: Exercisesviewmodel) {
        this.exerciseviewmodel = viewmodel
    }

    override fun createBinding(parent: ViewGroup): ExerciseInTrainingItembinding {
        return DataBindingUtil.inflate<ExerciseInTrainingItembinding>(
            LayoutInflater.from(parent.context),R.layout.exercise_in_training_item,parent,false
        ).apply {
            this.buttonDelete.setonClickListener {
                this.exercise?.let { deleteExercise(this.root,it.id.toString()) }
            }
            this.root.setonClickListener {
                this.exercise?.let { goToExerciseDetail(this.root,it) }
            }
            this.exerciseTime.setonClickListener {
                this.exercise?.let { setExerciseTime(this.root,it) }
            }
        }
    }

    override fun bind(binding: ExerciseInTrainingItembinding,item: ExerciseInTraining) {
        binding.exercise = item
    }

//methods implementation

}

解决方法

  1. 您可以在 DialogFragment 的 onDestroy() 方法中刷新视图。
  2. 要“刷新”列表,请使用回收站适配器的 notifyDataSetChanged() 方法。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?