我希望有人能澄清我在这里做错了什么。我在平板电脑上有一个通用的主细节,采用横向模式。唯一需要注意的是,master中的一些元素在Detail部分打开FragA,而其他元素在Detail部分打开FragB。除了切换碎片的实际过程外,一切似乎都很好。无论哪个片段最先显示,都是唯一显示的片段。我一直在使用replace方法来交换它们,我能找到的关于这个主题的所有SO评论都指出,如果我在XML中添加了细节片段,这将不起作用。不幸的是,这并不适用于我,因为我是动态添加所有片段的。我的代码如下所示:
FragmentInfo frag = (Helper.isImageViewable(fileSelected)) ? getFragInfoByClass(ImageViewerFragment.class) : getFragInfoByClass(DownloadProgressFragment.class) ;
FragmentTransaction ft = getFragmentManager().beginTransaction();
if(frag.mFragment == null){
frag.mFragment = Fragment.instantiate(NewMainActivity.this, frag.mClass.getName());
ft.add(frag.target.getId(), frag.mFragment);
ft.commit();
ft = getFragmentManager().beginTransaction();
}
ft.replace(frag.target.getId(), frag.mFragment);
ft.commit();
这是在任何地方用于添加这些片段的唯一代码,似乎发生的是,首先添加的片段都可以正常工作,但replace方法根本不起作用。无论是哪一块碎片。。。仍然存在。
有人知道我做错了什么吗?
编辑
布局文件的相关部分如下所示:
<LinearLayout
android:id="@+id/fragments_holder"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<FrameLayout
android:id="@+id/list_fragment"
android:layout_width="0dp"
android:layout_weight="0.39"
android:layout_height="match_parent" />
<FrameLayout
android:id="@+id/details_fragment"
android:layout_height="match_parent"
android:layout_weight="0.61"
android:layout_width="0dp" />
</LinearLayout>
两个FragmentInfo对象都正确地具有一个具有id/details_fragment的FrameLayout目标,这一事实证明,如果其中一个是第一个添加的,那么它可以正常工作。
编辑2
注意:使用此代码块也会得到完全相同的结果:
FragmentInfo frag = (Helper.isImageViewable(fileSelected)) ? getFragInfoByClass(ImageViewerFragment.class) : getFragInfoByClass(DownloadProgressFragment.class) ;
FragmentTransaction ft = getFragmentManager().beginTransaction();
if(frag.mFragment == null){
frag.mFragment = Fragment.instantiate(NewMainActivity.this, frag.mClass.getName());
ft.add(frag.target.getId(), frag.mFragment);
} else{
ft.replace(frag.target.getId(), frag.mFragment);
}
ft.commit();
detailsContainer.setFragmentInfo(frag);