【发布时间】:2013-11-26 00:13:22
【问题描述】:
如果我像这样向我的活动添加片段:
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)
它有时会被评估为真实,但不经常..我不太了解这种行为,但我需要实现多个片段之间的切换,所以我需要获取对确切片段的引用。有人吗?我现在尝试解决这个问题 6 个小时,但我真的不明白该怎么做。谢谢
【问题讨论】:
-
好吧回答一部分... "if(frg.get(0) == fragUser)" ...你不能使用
==比较对象.您需要使用if(frg.get(0).equals(fragUser)) -
Squonk 实际上这是我的意图.. 我不在乎对象是否具有相同的属性,但如果它们的引用相同,它们必须是相同的对象.. 我想要相同的片段。
标签: android android-fragments fragmentmanager