【发布时间】:2023-03-16 03:53:01
【问题描述】:
我正在使用带有抽屉式导航菜单的应用程序,我希望在应用程序启动时创建所有片段,因为某些片段从 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()
但是,我注意到当我在模拟器上运行它时,在某些设备上它只会正确显示一个 Fragment,其余的被添加但被隐藏。但是在其他一些设备上,它会显示所有的碎片重叠在一起,导致丑陋的混乱。此外,当我在平板电脑等横向设备上使用该应用程序时,片段也会相互重叠,因为我已强制该应用程序进入仅纵向模式。关于解决此问题的最佳方法的任何想法?
【问题讨论】:
-
根据您的实现,我相信您从 Web 服务获取数据不需要任何用户输入,您只需获取一次并进行显示。您可以在启动活动中或之后的某个地方获取所需的所有数据,并将其存储在容器类中,然后顺利显示所有内容。而不是进行频繁的片段转换。
标签: android android-fragments fragment navigation-drawer preload