我希望有人能清理我在這裏做錯了什麼。我在橫向模式範例中的平板電腦上使用了一個共同的主細節。唯一需要注意的是,主要部分中的某些元素在「明細」部分中打開了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