143

グループアクティビティ内にフラグメントがあり、それを別のフラグメントに置き換えたい:

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 メソッドにあります。ユーザーが水平スクロール ビューでアイテムをタップすると、フラグメントが変化するようにしたいと考えています。

4

14 に答える 14

37

この質問をご覧ください

「動的に追加されたフラグメント」のみを置き換えることができます。

したがって、動的フラグメントを追加する場合は、この例を参照してください。

于 2011-06-05T00:19:29.570 に答える
7

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();
于 2016-09-28T09:11:03.910 に答える
4

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();
于 2016-10-03T05:21:00.957 に答える
1

単一行のコードでフラグメントを動的に変更します
それはどのSDKバージョンでも動作し、androidx
としてナビゲーションを使用しますBottomNavigationView

    BottomNavigationView btn_nav;
    FragmentFirst fragmentFirst;
    FragmentSecond fragmentSecond;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_search);
        fragmentFirst = new FragmentFirst();
        fragmentSecond = new FragmentSecond ();
        changeFragment(fragmentFirst); // at first time load the fragmentFirst
        btn_nav = findViewById(R.id.bottomNav);
        btn_nav.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
                switch(menuItem.getItemId()){
                    case R.id.menu_first_frag:
                        changeFragment(fragmentFirst); // change fragmentFirst
                        break;
                    case R.id.menu_second_frag:
                        changeFragment(fragmentSecond); // change fragmentSecond
                        break;
                        default:
                            Toast.makeText(SearchActivity.this, "Click on wrong bottom SORRY!", Toast.LENGTH_SHORT).show();
                }
                return true;
            }
        });
    }
public void changeFragment(Fragment fragment) {
        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_layout_changer, fragment).commit();
    }
于 2019-12-07T04:50:52.790 に答える