应用程序启动时预加载片段

时间:2015-05-14 14:14:38

标签: android android-fragments fragment navigation-drawer preload

我正在使用带导航抽屉菜单的应用程序,我希望在应用程序启动时创建所有片段,因为一些片段从Web服务获取数据而我不希望用户拥有等待所有数据在进入屏幕时加载。要解决这个问题,我想一次创建所有片段,然后隐藏它们,然后显示正确的片段。

  private void initFragments() {
    FragmentManager fManager = getFragmentManager();
    FragmentTransaction fTransaction = fManager.beginTransaction();
    for (int i = 0; i < MAIN_FRAGMENTS; i++) {
        fTransaction.add(R.id.frame_container, fragmentArray[i], fragmentTags[i]);
    }
    fTransaction.commit();
    fManager.executePendingTransactions();
}
private void hideFragments(){
    FragmentManager fManager = getFragmentManager();
    FragmentTransaction fTransaction = fManager.beginTransaction();
    for (int i = 0; i < MAIN_FRAGMENTS; i++) {
        fTransaction.hide(fManager.findFragmentByTag(fragmentTags[i]));
    }
    fTransaction.commit();
    fManager.executePendingTransactions();
}

我解决这个问题的方法是创建所有片段,然后通过调用

隐藏它们
initFragments()
hideFragments()

但是,我注意到当我在模拟器上运行它时,在某些设备上它将正确显示一个片段,其余的被添加但隐藏。但是在其他一些设备上,它会显示所有碎片叠加在彼此的顶部,导致一个丑陋的混乱。此外,当我在平板设备(如平板电脑)上使用该应用程序时,片段也会相互重叠,因为我强迫应用程序进入仅限肖像模式。有关最佳方式的任何想法吗?

1 个答案:

答案 0 :(得分:1)

你有任何错误吗?

我怀疑某些设备/版本可能不支持findFragmentByTag()方法或hide()方法。试着调查一下。

关于您在平板电脑上的重叠问题,请尝试以下操作:https://stackoverflow.com/a/11086185/2929693