我有一个layout
,里面有两个Fragments
。第二个动态加载。
Fragment fg = EmptyRightFrag.newInstance();
getFragmentManager().beginTransaction().add(R.id.right_frag, fg)
.commit();
然后第二个frame
取代另一个'片段'。
Fragment fg = MyClass.newInstance();
getFragmentManager().beginTransaction().replace(R.id.right_frag, fg)
.commit();
最后,我需要通过调用:
初始化第二个Fragment
MyClass field = ((MyClass)getFragmentManager().findFragmentById(R.id.right_frag));
但在此我得到java.lang.ClassCastException
陈述EmptyRightFrag
无法投放到MyClass
。
答案 0 :(得分:2)
你在哪里打findFragmentById()
?你添加它后直接吗?
commit()
的文档说明了这一点:
计划此交易的提交。提交不会发生 立即;它将被安排为主线程上的工作 下次线程准备就绪时完成。
这意味着暂时不会添加Fragment
(至少在您的方法返回之前不会添加)。无论如何你可能不应该以这种方式处理初始化,最好让Fragment在onCreate()
或其他东西中处理它。
答案 1 :(得分:2)
只需在getFragmentManager().executePendingTransactions();
之前致电getFragmentManager().findFragmentById()
,一切都会好的。