用活动组内的另一个片段replace一个片段

我有一个组活动内的片段,我想用另一个片段replace它:

FragmentTransaction ft = getActivity().getFragmentManager().beginTransaction(); SectionDescriptionFragment bdf = new SectionDescriptionFragment(); ft.replace(R.id.book_description_fragment, bdf); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); ft.addToBackStack(null); ft.commit(); 

当它作为一个单独的项目而没有使用活动组,每个东西都可以正常工作时,它可以很好的工作,因为控件进入getview(),但是没有视图可见,甚至没有任何exception出现,我希望书的细节片段被部分细节片段取代。

book细节片段的xml具有id book_description_fragment和xml,用于片段描述片段具有id section_description_fragment。

上面的代码是在一个项目的onClick方法中,我想当用户在水平滚动视图中的一个项目上点击,然后片段改变。

硬编码为XML的片段不能被replace。 如果你需要用另一个replace一个片段,首先应该dynamic添加它们。

注意: R.id.fragment_container是您要将片段带入的活动中的布局或容器。

 // Create new fragment and transaction Fragment newFragment = new ExampleFragment(); FragmentTransaction transaction = getFragmentManager().beginTransaction(); // Replace whatever is in the fragment_container view with this fragment, // and add the transaction to the back stack if needed transaction.replace(R.id.fragment_container, newFragment); transaction.addToBackStack(null); // Commit the transaction transaction.commit(); 

请看这个问题

您只能replace“ dynamic添加的片段 ”。

所以,如果你想添加一个dynamic片段,请看这个例子。

我已经完成了pipe理片段 replace生命周期的 完美方法

它只会replace当前的片段,如果它不是相同的,并且不在backstack中(在这种情况下,它会popup)。

它包含几个选项,就好像你希望片段被保存在backstack中一样。

=> 请看这里

使用这个和一个单一的活动,你可能想要添加到您的活动:

 @Override public void onBackPressed() { int fragments = getSupportFragmentManager().getBackStackEntryCount(); if (fragments == 1) { finish(); return; } super.onBackPressed(); } 

在android.support.v4中使用下面的代码

  FragmentTransaction ft1 = getFragmentManager().beginTransaction(); WebViewFragment w1 = new WebViewFragment(); w1.init(linkData.getLink()); ft1.addToBackStack(linkData.getName()); ft1.replace(R.id.listFragment, w1); ft1.commit(); 

使用这个代码使用v4

  ExampleFragment newFragment = new ExampleFragment(); FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); // Replace whatever is in the fragment_container view with this fragment, // and add the transaction to the back stack so the user can navigate back transaction.replace(R.id.container, newFragment); transaction.addToBackStack(null); // Commit the transaction transaction.commit(); 

希望你做得很好。当我开始使用Android Fragments工作时,我也遇到了同样的问题,然后我读了关于1-如何切换与其他片段。 2-如何在Fragment container没有任何片段的情况下添加片段。

经过一番研发之后,我创造了一个function,可以帮助我在很多项目中,直到现在我还在使用这个简单的function。

 public void switchFragment(BaseFragment baseFragment) { try { FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right); if (getSupportFragmentManager().findFragmentById(R.id.home_frame) == null) { ft.add(R.id.home_frame, baseFragment); } else { ft.replace(R.id.home_frame, baseFragment); } ft.addToBackStack(null); ft.commit(); } catch (Exception e) { e.printStackTrace(); } } 

享受你的代码时间:)