5

最初にメソッドを使用しreplaceてバックスタックにフラグメントを追加し、次に戻るキーを押すと、スタック内のフラグメントがonCreateView再度呼び出されることがわかりました。これは API デモでも動作することがわかったので、バグではないと思います。しかし、戻るキーを押したときに前のアクティビティがメソッドを呼び出さないというアクティビティの動作のような効果を達成したいと思いますonCreate

後で私はfragmentManager.add()自分のアイデアを実現できることを発見しましたが、別の問題が発生しました.2番目のフラグメントを追加すると、前のフラグメントがまだ表示されます.

誰でも私を助けることができますか?

FragmentManager manager = getSupportFragmentManager();
        FragmentTransaction transaction2 = manager.beginTransaction();
        transaction2.add(R.id.fl, f2);
        transaction2.addToBackStack("Fragment2");
        transaction2.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
        transaction2.commit();
4

5 に答える 5

1

replace の使用に戻り、チェックを追加して、バンドルが null かどうかを確認します。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    ...
    if (savedInstanceState == null) {
        // do work 
        // If the view is being recreated this code won't run
    }
    ...
}
于 2013-05-29T06:50:51.660 に答える
0

フラグメントの argb バックグラウンドを設定しているかどうかを確認してください。その場合、その背景を RGB に置き換えます。aは透明を意味します。

于 2014-10-13T10:08:43.973 に答える
0

初めてフラグメントを追加する場合は、コードのようにフラグメントを追加できます。

Fragment_Home fragment = new Fragment_Home();
        FragmentTransaction fts = (MainActivity.this).getSupportFragmentManager().beginTransaction();
        fts.add(R.id.frame_container, fragment);
//        fts.addToBackStack(fragment.getClass().getSimpleName());
        fts.commit();

これから別のフラグメントに移動する場合は、現在のフラグメントを新しいフラグメントに置き換える必要があります。

Fragment_CreateGroup fragment = new Fragment_CreateGroup();
            fts = (MainActivity.this).getSupportFragmentManager().beginTransaction();
//            fts.addToBackStack(fragment.getClass().getSimpleName());
            fts.replace(R.id.frame_container, fragment);
            fts.commit();

これは上に定義されたftsオブジェクトです。FragmentTransaction

于 2015-12-14T09:40:06.683 に答える
-1

使ってみて

manager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); 

新規追加前FragmentTransaction こちら

于 2015-12-14T09:24:46.283 に答える