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

时间:2014-07-10 11:57:52

标签: android android-fragments

我有一个效果很好的导航抽屉。好吧,我的意思是我可以浏览绑定到导航抽屉(A,B,C,D)的所有片段。我的问题出现在这里。让我们说在片段A中,在这个片段中,我有一个按钮,点击时理想情况下应该用另一个片段替换片段,比如片段Z,一旦我在片段Z中,我就可以返回到片段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();

1 个答案:

答案 0 :(得分:0)

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

例如:

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);