0

次のようにアクティビティにフラグメントを追加する場合:

    fragment_tags = new ArrayList<String>();
    fragment_tags.add("user_fragment");
    fragment_tags.add("memorial_fragment");

    UserFragment user = new UserFragment();
    MemorialFragment memorial = new MemorialFragment();

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();

    ft.add(R.id.content_frame, user, fragment_tags.get(0));
    ft.add(R.id.content_frame, memorial, fragment_tags.get(1));
    ft.commit();

そして、しばらくしてから、これらのフラグメントを次のように取得しようとしています:

    List<Fragment> frg = getSupportFragmentManager().getFragments();
    Fragment fragUser = getSupportFragmentManager().findFragmentByTag(
            "user_fragment");
    Fragment fragUserID = getSupportFragmentManager().findFragmentById(
            R.id.user_fragment_id);
            Log.d("MV", "fragments size:" + (frg == null ? " null" : frg.size()));

Log.d は常に 2 のサイズを返しますが、fragUser は null の場合もあれば、トランザクションに入れたフラグメントである場合もあります。

さらに興味深いのは、次のコードです。

    try {
        Log.d("MV", "0:" + frg.get(0).toString());
        Log.d("MV", "1:" + frg.get(1).toString());
    } catch (NullPointerException e) {
        Log.d("MV", "null caught");
    }

両方のフラグメントで機能することもあれば、最初のフラグメントだけで機能することもあります。

if(frg.get(0) == fragUser)

true と評価されることもありますが、頻繁ではありません。この動作はよくわかりませんが、複数のフラグメント間の切り替えを実装する必要があるため、正確なフラグメントへの参照を取得する必要があります。誰か?これを6時間解決しようとしていますが、これを行う方法が本当にわかりません。ありがとうございました

4

1 に答える 1