当前位置: 首页 > 知识库问答 >
问题:

当我在我的android应用中使用底部导航导航到不同的片段时,如何保持计时器运行?

酆浩邈
2023-03-14

当我使用底部导航进行导航时,碎片会被破坏,计时器会重置到00:00。我用过计时器。我尝试了RetainInstance=true,但它只在屏幕旋转时才有帮助。

mainactivity.kt

class MainActivity : AppCompatActivity() {
    private lateinit var navController: NavController



    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val navHostFragment =supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
        navController =navHostFragment.findNavController()

        bottom_nav.setupWithNavController(navController)

    }

} 

TimerFragment.kt

class TimerFragment : Fragment(R.layout.fragment_timer) {

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {

        super.onViewCreated(view, savedInstanceState)
       
          //code
        
    }

     //Few functions
}

共有1个答案

薛利
2023-03-14

我建议您使用ViewModel方法,即ActivityViewModel FragmentViewModel

在您的viewModel中保留计时器值,当片断将要破坏时,更新您的activity视图模型中的计时器值。

类似地,在fragment的Create中,从ActivityViewModel更新FragmentViewModel中的计时器值

原因是viewModel在activity重新创建后保留了数据。

 类似资料:
  • 我有如下的屏幕,其中包含一个导航抽屉和底部导航在同一个屏幕上: 我正在使用Jetpack导航架构组件。 当前问题和我尝试了什么? 单击第二个和第三个底部导航项目会在工具栏上显示返回箭头吗? 已尝试:将与第二和第三底部导航相关联的片段设置为顶级目的地 代替 不起作用。 任何帮助高度赞赏! 我的代码如下所示。 activity_main.xml menu_bottom.xml nav_graph.xm

  • 我的主要活动中有一个底部导航栏。通过单击底部导航中的一个选项卡,我想更改视图中的片段。我有以下代码:主要活动: } 我的一个片段: 如果我单击其中一个选项卡,就会显示正确的片段,因此这是可行的。然而,当新片段出现时,我想单击另一个选项卡来显示另一个片段,这就行不通了。底部导航栏不会对单击做出反应。甚至日志。i语句不起作用,因此似乎没有调用导航项SelectedListener。 我对android

  • 我创建了一个带有“底部导航活动”的新项目: 这是生成的代码: 如何使用底部栏更改为新片段?例如,我有3个片段:Fragment1 Fragment2和Fragment3,我想用底部栏中的3个按钮更改为它们。我还想通过左右滑动手指来切换片段,我该怎么做?

  • 我目前正在开发一个Flutter应用程序,它将在使用BottomNavigationBar时,在从一个屏幕导航到另一个屏幕,然后再返回时保留状态。就像它在Spotify移动应用程序中一样;如果您在某个主屏幕上向下导航到导航层级中的某个级别,通过底部导航栏更改屏幕,然后再更改回旧屏幕,将会保留用户在该层级中的位置,包括状态的保留。 我把头靠在墙上,尝试各种不同的事情,但没有成功。 我想知道如何防止<

  • 我有一个ViewModel处理我的业务逻辑,我正在使用Koin将它注入到我的活动和每个片段中。然而,在我从片段A-片段B导航并导航回片段A之后,我的观察者再次被触发。为什么会发生这种情况?当我返回时,如何阻止这种onChanged被触发? 我尝试将'this'和'view LifecycleOwner'设置为LiveData的LifecycleOwner。 我还尝试将observable移动到on

  • 我创建了一个带有底部导航栏的活动。我在谷歌上搜索了很多关于它的信息,但现在我不知道如何准确地处理这个问题。之前,当用户点击底部导航时,我刚刚开始了另一个活动,但我认为这不好。 如何在选项卡之间切换?我必须处理碎片吗?那么“setContentView(int layoutResID)”呢?我该怎么做?我很困惑。。。 非常感谢你的帮助——我希望你明白我的意思。