Android 将导航抽屉中创建的片段替换为另一个片段

Android 将导航抽屉中创建的片段替换为另一个片段,android,android-fragments,Android,Android Fragments,我有一个很好用的导航抽屉。我的意思是,我可以浏览与导航抽屉A、B、C、D相关的所有片段。我的问题出现在这里。假设我在片段A中,在这个片段中我有一个按钮,点击这个按钮,理想情况下应该用另一个按钮替换片段,比如Frag Z,一旦我在Frag Z中,我可以返回Frag A 为了实现这一点,我使用下面的代码。但是,新的片段Z在片段A的顶部看起来是透明的。可能有什么问题: Bundle bundle = new Bundle(); bun

我有一个很好用的导航抽屉。我的意思是,我可以浏览与导航抽屉A、B、C、D相关的所有片段。我的问题出现在这里。假设我在片段A中,在这个片段中我有一个按钮,点击这个按钮,理想情况下应该用另一个按钮替换片段,比如Frag Z,一旦我在Frag Z中,我可以返回Frag A

为了实现这一点,我使用下面的代码。但是,新的片段Z在片段A的顶部看起来是透明的。可能有什么问题:

                 Bundle bundle = new Bundle();
                 bundle.putInt("int", 1);
                 bundle.putString("str","string" ); 
                 fragmentTransaction = getFragmentManager().beginTransaction();
                 FragZ fragmentz = new FragZ();
                 fragment.setArguments(bundle);
                 fragmentTransaction.replace(R.id.some_container, fragmentz);
                 fragmentTransaction.addToBackStack(null);
                 fragmentTransaction.commit(); 
编辑:

我已经找到了如下所示的解决方法,但是它并不能完全解决我的问题,因为新显示的片段仍然显示在导航抽屉中,可以进行切换,但它至少移除了片段的覆盖。我仍然想要一个解决方案来启动一个独立的片段

                 Bundle bundle = new Bundle();
                 bundle.putInt("int", 1);
                 bundle.putString("str","string" ); 
                 FragZ fragmentz = new FragZ();
                 FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
                 fragment.setArguments(bundle);
                 ft.replace(R.id.main, fragment);
                 ft.addToBackStack(null);
                 ft.commit();

在活动中创建一个方法来启动片段。无论何时,只要想显示片段,就用一个数字或字符串来表示片段。您可以使用相同的功能从导航抽屉启动片段

例如:

public void displayView(int position) {
    Fragment fragment = null;
    currentFragmentNumber = position;
    switch (position) {
    case 0:

        fragment = new frag1();

        break;
    case 1:
        fragment = new frag2();

        break;
    case 2:
        fragment = new frag3();

        break;

    default:
        break;
    }

    if (fragment != null) {
        FragmentManager fragmentManager = getFragmentManager();
        fragmentManager.beginTransaction()
                .replace(R.id.frame_container, fragment)
                .addToBackStack("tag").commit();            

    } else {
        // error in creating fragment
        Log.e(TAG, "Error in creating fragment");
    }
}
您可以使用以下方法从活动中调用此函数:

((**ActivityName**) getActivity()).displayView(0);

这将适用于任何片段-活动对…但是我的场景是唯一的,因为添加了导航抽屉。在您的情况下,我将只替换框架布局R.id.frame_容器中的后续片段,这正是我编辑问题的目的,以显示我可以实现的,但不是我想要的,我想要一种新创建的片段不在导航抽屉中的情况