如果我像这样向我的活动添加片段:
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 有时为空,有时它是我放入事务的片段。
更有趣的是这段代码:
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)
它有时会被评估为真实,但不经常..我不太了解这种行为,但我需要实现多个片段之间的切换,所以我需要获取对确切片段的引用。有人吗?我现在尝试解决这个问题 6 个小时,但我真的不明白该怎么做。谢谢