我有一个效果很好的导航抽屉。好吧,我的意思是我可以浏览绑定到导航抽屉(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();
答案 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);