如何找到动态变化的片段?

时间:2011-08-22 12:50:12

标签: android android-3.0-honeycomb

我有一个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

2 个答案:

答案 0 :(得分:2)

你在哪里打findFragmentById()?你添加它后直接吗?

commit()的文档说明了这一点:

  

计划此交易的提交。提交不会发生   立即;它将被安排为主线程上的工作   下次线程准备就绪时完成。

这意味着暂时不会添加Fragment(至少在您的方法返回之前不会添加)。无论如何你可能不应该以这种方式处理初始化,最好让Fragment在onCreate()或其他东西中处理它。

答案 1 :(得分:2)

只需在getFragmentManager().executePendingTransactions();之前致电getFragmentManager().findFragmentById(),一切都会好的。