gpt4 book ai didi

java - Android:放置多个 fragment 共享的功能的位置

转载 作者:行者123 更新时间:2023-12-02 13:26:54 25 4
gpt4 key购买 nike

我有三个片段,所有片段都有两个功能完全相同。我的问题是(显然)我不想一遍又一遍地复制相同的两个函数并将其放在片段中。
没有办法将这些函数放在一个地方并从我的片段中调用它们吗?这些功能与navController和工具栏导航有关,因此我无法将其放入 View 模型中。另一个解决方案可能是创建一个Baseclass片段,将这些函数放在那里并从中继承?
职能

private fun initProgressbar(currentStateNumber: StateProgressBar.StateNumber, progressBarDescription: ArrayList<String>) =
state_progress_bar.apply {
setStateDescriptionData(progressBarDescription)
setCurrentStateNumber(currentStateNumber)
}

private fun initToolbar(navController: NavController, appBarConf: AppBarConfiguration, textToolbar: String?) =
toolbar.apply {
setupWithNavController(navController, appBarConf)
toolbar_title.text = textToolbar
}
在不违反mvvm架构或片段生命周期的情况下,我没有找到任何解决方案。我正在使用jetpack导航,mvvm和 Dagger 柄。
感谢您的帮助。
编辑:可能的解决方案
abstract class BaseFragment(
layout: Int,
private val progressBarDescription: ArrayList<String>,
private val stateNumber: StateProgressBar.StateNumber
) : Fragment(layout) {

private val _navController: NavController by lazy { findNavController() }
private val appBarConf by lazy { AppBarConfiguration(_navController.graph) }
private val calibrateRepairToolbarText by lazy { arguments?.getString("calibrate_repair_toolbar_text") }

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initProgressbar()
initToolbar()
}

val navController: NavController
get() = _navController

fun initProgressbar(): StateProgressBar = state_progress_bar.apply {
setStateDescriptionData(progressBarDescription)
setCurrentStateNumber(stateNumber)
}

fun initToolbar(): MaterialToolbar = toolbar.apply {
setupWithNavController(_navController, appBarConf)
toolbar_title.text = calibrateRepairToolbarText
}
}
然后在另一个片段中:
class Fragment(
private val progressBarDescription: ArrayList<String>,
@StateNumberOne private val stateNumber: StateProgressBar.StateNumber
) : BaseFragment(
R.layout.fragment_calibrate_repair_message,
progressBarDescription,
stateNumber
) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
}

}

最佳答案

您可以使用这些方法创建一个baseFragment,然后让您的三个Fragment扩展baseFragment

关于java - Android:放置多个 fragment 共享的功能的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63437390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com