Arv*_*vra 14 android android-fragments android-fragmentactivity navigation-drawer
我目前正在为我的Android APP使用导航抽屉.在我的第一个片段中,我有一个使用Facebook的Graph API加载数据的片段.因此,当我的App首次加载时,它首先转到第一个片段.

然后,我使用导航抽屉点击另一个片段并查看它.

最后,我重复使用导航抽屉返回第一个片段并查看它.

我面临的问题是,如何选择导航抽屉项目,如何继续使用已创建的片段,而不是重新创建片段.我切换片段的代码如下所示.
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");
}
}
Run Code Online (Sandbox Code Playgroud)
我注意到每次选择选项时,片段确实存在"新"实例.我如何实现创建片段实例ONCE并重用它的逻辑,这样我就不必一遍又一遍地连续加载片段.
Arv*_*vra 17
对于遇到同样问题的人,我设法找到了解决方案.
在容器框架中,我将定义我将使用的特定片段视图,如下所示.

在每个片段视图中,我将通过"android:name"属性将其与实际片段本身"链接",如下所示.请注意片段的路径,例如,在我的例子中,它是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" />
Run Code Online (Sandbox Code Playgroud)
在MainActivity(或我们正在查看片段的Activity)中,为每个片段创建变量,如下所示.

然后,在MainActivity 的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();
}
Run Code Online (Sandbox Code Playgroud)
从那时起,在切换片段时,使用所选片段手动调用" ShowFragment "方法,如下所示.

完成所有这些操作,每次我们查看时都不会重置片段,因此是答案的解决方案.感谢迄今为止帮助过我的任何人:)!
| 归档时间: |
|
| 查看次数: |
14120 次 |
| 最近记录: |