gpt4 book ai didi

Android:每次单击抽屉导航项时创建一个新 fragment 更好还是加载以前创建的 fragment ?

转载 作者:IT老高 更新时间:2023-10-28 22:03:40 30 4
gpt4 key购买 nike

我正在为 android 实现标准的抽屉导航模式,用户可以从抽屉导航到大约 10 个 fragment 。目前,每次点击不同的抽屉导航项目时,我都会创建一个新的 fragment ,如下所示:

// When a new navigation item at index is clicked 
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
Fragment newFragment = null;
if (index == 0)
fragment = new Fragment0();
...
ft.replace(R.id.container, newFragment);
ft.commit();

我一直想知道执行以下操作是否更有效:

// Somewhere in onCreate
Fragment[] fragments = new Fragment[n];
fragments[0] = new Fragment0();
fragments[1] = new Fragment1();
...

// When a new navigation item (at index) is clicked
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.replace(R.id.container, fragments[index]);
ft.commit();

我主要担心的是某些 fragment 包含大量数据(相当大的列表和大量 View )。将所有这些 fragment 保存在内存中是否会有任何问题,并且它是否会比每次实例化新 fragment 提供任何优势(除了 fragment 之间的更快切换)?是否有普遍接受的“更好”解决方案?

最佳答案

我遇到了类似的问题。我采用了与您类似的方法,为了节省处理器负载,我对 every 调用进行了以下调整,以创建 Fragment 对象的实例:(在我在 selectItem 方法中使用的上下文中)

switch (position) {
case 0:
if (fragmentOne == null)
fragmentOne = new FragmentOne();
getSupportFragmentManager().beginTransaction().......
break;
case 1:
if (fragmentTwo == null)
fragmentTwo = new FragmentTwo();
getSupportFragmentManager()......

FragmentOne 和 FragmentTwo 是两个不同的 Fragment 类,fragmentOne 和 fragmentTwo 是它们在 MainActivity 中声明为字段的对象

编辑:

我想补充一下,您可以如何使用包含 fragment 的数组来遵循类似的方法。而不是在 onCreate 中创建新 fragment ,而是在单击项目时执行此操作。在 onCreate 中,向抽屉发送调用以选择您希望在启动时默认选择的 fragment 。

//somewhere in onCreate
if (savedInstanceState == null) {
selectItem(defaultFragment);
}
else
selectItem(selectedFragment);
//selectItem is method called by DrawerItemClickListener as well


//in selectItem: when navigation item at index is clicked, the listener calls this
switch (index) {
case 0:
if (fragments == null) {
fragments = new Fragment[n];
fragment[0] = new Fragment0();
}
else if (fragments[0] == null) {
fragments[0] = new Fragment0();
}
break;
....
}
FragmentTransaction ft = fragmentManager.beginTransaction();
...
ft.replace(R.id.container, fragments[index]);
ft.commit();

无需在 onCreate 上实例化 fragment ,因为这会使启动变慢。在需要时创建它们,然后使用相同的(如果存在)。只有在首次加载新 fragment 时才会创建新 fragment 。

关于Android:每次单击抽屉导航项时创建一个新 fragment 更好还是加载以前创建的 fragment ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18398264/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com