我正在使用带导航抽屉菜单的应用程序,我希望在应用程序启动时创建所有片段,因为一些片段从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()
但是,我注意到当我在模拟器上运行它时,在某些设备上它将正确显示一个片段,其余的被添加但隐藏。但是在其他一些设备上,它会显示所有碎片叠加在彼此的顶部,导致一个丑陋的混乱。此外,当我在平板设备(如平板电脑)上使用该应用程序时,片段也会相互重叠,因为我强迫应用程序进入仅限肖像模式。有关最佳方式的任何想法吗?
答案 0 :(得分:1)
你有任何错误吗?
我怀疑某些设备/版本可能不支持findFragmentByTag()方法或hide()方法。试着调查一下。
关于您在平板电脑上的重叠问题,请尝试以下操作:https://stackoverflow.com/a/11086185/2929693