用活动组内的另一个片段替换片段

java android android-fragments

247659 观看

9回复

626 作者的声誉

我在组活动中有一个片段,我想用另一个片段替换它:

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()内部,每个东西都可以在log cat中正常工作,但是没有视图可见,甚至没有出现任何异常,我希望书籍详细信息片段为由部分细节片段替换。

书籍详细信息片段的Xml具有id book_description_fragment,而用于部分描述片段的xml具有id section_description_fragment。

上面的代码在项目的onClick方法中,我希望当用户点击水平滚动视图中的项目时,片段会发生变化。

作者: Lion Heart 的来源 发布者: 2011 年 4 月 14 日

回应 (9)


31

6745 作者的声誉

请看这个问题

您只能替换“ 动态添加的片段 ”。

因此,如果要添加动态片段,请参阅示例。

作者: Sana 发布者: 05.06.2011 12:19

236

13048 作者的声誉

以XML格式编码的片段无法替换。如果你需要用另一个片段替换片段,你应该首先动态添加它们。

注意: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();
作者: Subin Sebastian 发布者: 22.09.2013 06:13

8

9173 作者的声誉

我已经用完美的方法来管理片段 替换生命周期

它只用一个新片段替换当前片段,如果它不相同并且它不在backstack中(在这种情况下它将弹出它)。

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

=> 见这里的要点

使用此活动和单个活动,您可能希望将其添加到您的活动中:

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

    super.onBackPressed();
}
作者: Hugo Gresse 发布者: 02.03.2016 11:12

7

433 作者的声誉

在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();
作者: Sachin Suthar 发布者: 28.09.2016 09:11

4

457 作者的声誉

使用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();
作者: Manish Butola 发布者: 03.10.2016 05:21

3

1303 作者的声誉

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

经过一些研发后,我创建了一个功能,这个功能在很多项目中帮助我,直到现在我还在使用这个简单的功能。

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

享受你的代码时间:)

作者: John smith 发布者: 07.02.2017 09:42

3

39 作者的声誉

使用ViewPager。这对我有用。

final ViewPager viewPager = (ViewPager) getActivity().findViewById(R.id.vp_pager); 
button = (Button)result.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        viewPager.setCurrentItem(1);
    }
});
作者: Nikolay 发布者: 09.01.2018 07:48

0

139 作者的声誉

你可以使用简单的代码来处理事务

Fragment newFragment = new MainCategoryFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_frame_NavButtom, newFragment);
ft.commit(); 
作者: Alireza 发布者: 21.09.2018 12:48

0

1224 作者的声誉

在kotlin你可以做:

// instantiate the new fragment
val fragment: Fragment = ExampleFragment()

val transaction = supportFragmentManager.beginTransaction()
transaction.replace(R.id.book_description_fragment, fragment)
transaction.addToBackStack("transaction_name")
// Commit the transaction
transaction.commit()
作者: Nicola Gallazzi 发布者: 15.02.2019 03:59
32x32