【问题标题】:Android actionbar tabs: content of each tab is recreated everytime I click on that tabAndroid 操作栏选项卡:每次单击该选项卡时都会重新创建每个选项卡的内容
【发布时间】:2013-12-09 08:09:36
【问题描述】:

我正在开发一个使用 ActionBar 导航的应用程序,我有 3 个选项卡(我不使用 tabhost),如下图所示:

在第一个标签中,会显示一个名为FragmentListItem的片段,如果我点击Item1,FragmentListItem将被另一个名为FragmentItemDetails的片段替换strong>,显示所选项目的详细信息。

我的问题是,当我选择 Tab2 或 Tab 3,然后再次重新选择 Tab1 时,我得到的不再是 FragmentItemDetail,而是 FragmentListItem

那么,这是为什么呢?如果我希望 FragmentItemDetail 仍然存在而不是 FragmentListItem,该怎么做?

此外,当我按下返回按钮(选择 Tab1 时)时,我希望 FragmentListItem 将再次显示。我意识到 Fragment 类没有要实现的 onBackPressed 方法。

【问题讨论】:

    标签: android android-fragments tabs android-actionbar


    【解决方案1】:

    这个问题有不同的解决方案。

    一种可能的解决方案是为此选项卡使用自己的FragmentManager。这可以通过FragmentsgetChildFragmentManager() 方法实现。

    另一种解决方案可能是一个标志,用于识别哪个 Fragment 在 Tab1 上显示为最后一个。如果您知道最后显示的是哪一个 Fragment,您可以使用 FragmentManagerfindFragmentByTag(tag) 方法在 BackStack 中搜索此 Fragment 来显示该 Fragment。

    但我建议您尝试第一个选项。如果每个选项卡都有自己的堆栈,那么使用 BackButton 的工作量就会减少。

    【讨论】:

    • getChildFragmentManager 之后的下一步是什么?实际上,我正在使用您的第二个解决方案执行相同的任务,但它还不起作用。
    • 如果每个选项卡都有自己的 BackStack,那么您不必在 BackStack 中搜索最后一个 Fragment(-> 因为您只有一个 BackStack)。 BackStak 的最后一个片段将自动显示。您如何在第二个解决方案中“显示”片段?尝试replace片段。
    • 在tab1中,我有一个名为“Frag1”的“父片段”,第一次被选中时,我使用FragmentTransition类的方法replace来显示FragmentListItem,在 FragmentListItemonItemClick 内,我显示 FragmentItemDetails(也使用方法 replace)。稍后,每当我单击 Tab1 时,我都会检查变量 tab1CurrentFragment 以确定将显示哪个片段。但是,它不起作用,并且只要选择Tab1,它似乎重新创建了内部的每一件事,并且始终首先显示 fragmentlistitem 。 (对不起我的英语不好)
    • 实际上我的问题只是阻止 Android 在我单击相应选项卡时重新创建片段的新实例。只需像 TabHost 一样保持每个选项卡的状态。
    • 你使用TabListener(developer.android.com/reference/android/app/…)吗?在那里你可以覆盖方法onTabReselected
    猜你喜欢
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-06
    • 2022-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多