次のようにアクティビティにフラグメントを追加する場合:
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時間解決しようとしていますが、これを行う方法が本当にわかりません。ありがとうございました