0

我有一个使用 NavigationDrawer 的应用程序。

我像这样切换片段:

private class DrawerItemClickListener implements
            ListView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {

            selectItem(position);
        }
    }

public void selectItem(int position) { 

        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager
                .beginTransaction();
        String fragmentTag = String.valueOf(position);

        FragmentBase fragment = (FragmentBase) fragmentManager
                .findFragmentByTag(fragmentTag);
        if (null == fragment) { 
            fragment = createFragmentByPosition(position);
        }
        if (null == fragment)
            return;

        if (fragment.isAdded()) {
            fragmentTransaction.show(fragment);
        } else {
            fragmentTransaction.add(R.id.content_frame, fragment, fragmentTag); 
        }

        if (mCurrentFragment != null) {
            fragmentTransaction.hide(mCurrentFragment);
        }
        mCurrentFragment = fragment;
        fragmentTransaction.commitAllowingStateLoss();

        mDrawerList.setItemChecked(position, true);
        setTitle(mNoterActivities[position]);
        mDrawerLayout.closeDrawer(mDrawerList);
    }

    private FragmentBase createFragmentByPosition(int position) { // FragmentBase just extends Fragment
        FragmentBase fragment = null;

        if (position == 0) {
            fragment = new Fragment1();
            Bundle args = new Bundle();
            fragment.setArguments(args);

        } else if (position == 1) { // Reminder
            fragment = new Fragment2();
            Bundle args = new Bundle();
            fragment.setArguments(args);

        }

        return fragment;
    }

在 onCreate() 方法中,我执行 selectItem(0)。

我之前使用 android:configChanges="keyboardHidden|orientation|screenSize"的是Activity,但现在我想开始为不同的屏幕尺寸和方向创建不同的布局。如果此代码在清单中,我无法使用适当命名的文件夹来执行此操作。

所以,我决定删除它(我不记得为什么我有它!)。但是,通过这样做,每当方向改变时,显示的片段仍然是相同的,但操作栏会更改为另一个片段配置(我认为是之前显示的片段),如果我然后尝试切换片段,操作栏更改(我认为也是之前显示的片段),但显示的片段没有改变。

什么不起作用

更改.add.replace

4

2 回答 2

3

当某些配置发生变化时,例如方向,应用程序将重新启动,视图将被重新创建,onCreate将被调用。

重新创建视图时,ActionBar 将变为原始状态。

但是如果你添加android:configChanges="keyboardHidden|orientation|screenSize"Manifest.xmlonConfigurationChanged将被调用而不是onCreate,视图将不会被重新创建。

更新1

您应该保留 android:configChanges="keyboardHidden|orientation|screenSize",然后在屏幕大小和方向发生更改后更改布局,方法中:onConfigurationChanged

以下是一些示例:处理运行时更改

于 2013-08-30T00:40:55.397 回答
-1

如果您不想对 ScreenSize 产生影响,那么您只能删除它。但是,如果您删除以具有其他参数,例如方向和键盘,那么它只会在方向发生时加载整个布局。

因此,正如我的建议,只需使用以下内容:

android:configChanges="keyboard|orientation"

这样,您将获得片段保持选中状态,并且布局不会得到更新。

请尝试让我知道它是否对您没有帮助。

于 2013-08-29T10:38:49.763 回答