我希望有人能清理我在这里做错了什么。我在横向模式范例中的平板电脑上使用了一个共同的主细节。唯一需要注意的是,主要部分中的某些元素在“明细”部分中打开了FragA,而其他元素则在详细部分中打开了FragB。除了切换片段的实际过程外,一切看起来都很好。无论哪个碎片首先显示是唯一显示的碎片。我一直在使用replace方法将它们交换出来,并且我可以发现所有关于主题的SO注释都指出,如果我已经在XML中添加了详细信息片段,这将不起作用。不幸的是,这不适用于我,因为我动态添加所有片段。我的代码如下所示:Android的片段替换不会做任何事情
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();
这是在任何地方使用添加这些片段的唯一代码,什么似乎发生的是哪个片段首先加入工作正常,但替换方法不能在所有的工作。无论哪个片段在那里都是......仍然存在。
有谁知道我在做什么错?
编辑
布局文件的相关部分如下所示:
<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" />
<!-- ADD METADATA VIEW HERE -->
</LinearLayout>
两个FragmentInfo对象作出正确已在FrameLayout里与ID/details_fragment目标这表现在如果是第一个加入的话,任何一个都可以正常工作。
编辑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);
//ft.commit();
//ft = getFragmentManager().beginTransaction();
} else{
ft.replace(frag.target.getId(), frag.mFragment);
}
//ft.replace(frag.target.getId(), frag.mFragment);
ft.commit();
detailsContainer.setFragmentInfo(frag);
显示布局文件 – 2013-04-04 21:46:41
,但我不认为它应该的问题因为正如我所提到的,第一个片段添加(不管它是哪一个片段)显示正确 – akhalsa 2013-04-04 21:57:42