gpt4 book ai didi

Android 抽屉导航 fragment 状态

转载 作者:可可西里 更新时间:2023-11-01 19:05:11 28 4
gpt4 key购买 nike

我目前正在为我的 Android APP 使用 Navigation Drawer。在我的第一个 fragment 中,我有一个使用 Facebook 的 Graph API 加载数据的 fragment 。因此,当我的应用程序首次加载时,它首先转到第一个 fragment 。

First

然后,我使用 Navigation Drawer 单击另一个 Fragment 并查看它。

Second Fragment

最后,我重新使用 Navigation Drawer 返回第一个 Fragment 并查看它。

First Fragment

我面临的问题是,如何继续使用已创建一次的 fragment ,而不是在选择抽屉导航项时重新创建它。我的 fragment 切换代码如下所示。

private void displayView(int position) {
// update the main content by replacing fragments
Fragment fragment = null;
switch (position) {
case 0:
fragment = new SelectionFragment();
break;
case 1:
fragment = new HomeFragment();
break;
case 2:
fragment = new PhotosFragment();
break;
case 3:
fragment = new CommunityFragment();
break;
case 4:
fragment = new PagesFragment();
break;
case 5:
fragment = new SplashFragment();
break;
default:
break;
}

if (fragment != null) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.frame_container, fragment).commit();

// update selected item and title, then close the drawer
mDrawerList.setItemChecked(position, true);
mDrawerList.setSelection(position);
setTitle(navMenuTitles[position]);
mDrawerLayout.closeDrawer(mDrawerList);
} else {
// error in creating fragment
Log.e("MainActivity", "Error in creating fragment");
}
}

我注意到每次选择该选项时,确实有一个"new"的 fragment 实例。我如何着手实现创建 Fragment 实例的逻辑 ONCE 并重新使用它,这样我就不必一遍又一遍地持续加载 Fragment。

最佳答案

对于遇到与我相同问题的任何人,我已设法找到解决方案。

在容器框架中,我必须定义我将使用的特定 fragment View ,如下所示。

Specific fragments

在每个 Fragment View 中,我必须通过 “android:name” 属性将它与实际的 Fragment 本身“链接”起来,如下所示。请注意 path 到 fragment ,例如在我的例子中是 com.example.confesssionsrp.SelectionFragment

<fragment
android:id="@+id/selectionFragment"
android:name="com.example.confessionsrp.SelectionFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />

在 MainActivity(或我们正在查看 fragment 的 Activity )中,为每个 fragment 创建变量,如下所示。

Variables

然后,在 MainActivity(或您的特定 Activity)的 Oncreate 中,初始化各种 fragment ,如下所示。

OnCreate

继续创建名为“ShowFragment”的新方法,如下所示。

private void showFragment(int fragmentIndex, boolean addToBackStack) {
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
for (int i = 0; i < fragments.length; i++) {
if (i == fragmentIndex) {
transaction.show(fragments[i]);
if (Session.getActiveSession().isClosed()) {
mDrawerLayout
.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
}
} else {
transaction.hide(fragments[i]);
}
}
if (addToBackStack) {
transaction.addToBackStack(null);
}
transaction.commit();
}

从那时起,在 fragment 的切换中,如下所示使用选定的 fragment 手动调用“ShowFragment”方法。

Show Fragment

整体完成所有这些,不会在我们每次查看时重置 fragment ,因此是答案的解决方案。感谢迄今为止帮助过我的任何人:)!

关于Android 抽屉导航 fragment 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24186781/

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