最佳答案
在我的 main.xml
里,我有
<FrameLayout
android:id="@+id/frameTitle"
android:padding="5dp"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:background="@drawable/title_bg">
<fragment
android:name="com.fragment.TitleFragment"
android:id="@+id/fragmentTag"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</FrameLayout>
像这样设置片段对象
FragmentManager fragmentManager = activity.getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment newFragment = new FragmentType1();
fragmentTransaction.replace(R.id.frameTitle, casinodetailFragment, "fragmentTag");
// fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
它在不同的时间设置不同类型的片段对象(FragmentType2,FragmentType3,...
)。现在,在某个时间点,我需要确定哪个对象当前在那里。
在 太短了中,我需要这样做:
Fragment currentFragment = //what is the way to get current fragment object in FrameLayout R.id.frameTitle
我试过以下方法
TitleFragment titleFragmentById = (TitleFragment) fragmentManager.findFragmentById(R.id.frameTitle);
还有
TitleFragment titleFragmentByTag = (TitleFragment) fragmentManager.findFragmentByTag("fragmentTag");
但是 两个对象(titleFragmentById 和 titleFragmentByTag)都是 null
我错过什么了吗?
我正在使用 Compatibility Package, r3
和为 API level 7
开发。
如果我们已经使用 fragmentTransaction.replace
或 fragmentTransaction.add
设置了片段,那么 findFragmentById()
和 findFragmentByTag()
将工作,但是如果我们已经在 xml 处设置了对象(就像我在 main.xml
中所做的那样) ,那么 return null
将工作。我想我在 XML 文件中遗漏了一些东西。