的Android developer documentation for fragments這樣說:片段混亂
「注意:當您的佈局XML文件中定義 片段添加片段與活動佈局,你不能在 運行時刪除片段如果您計劃在用戶 互動中交換片段時,必須在 活動首次啓動時將該片段添加到活動中,如下一課所示。「
而且這部分是因爲這個,我鑽進總是使用片段經理添加/刪除片段/從我的用戶界面(即使我不希望在運行時「熱插拔」它們)的習慣。我100%肯定當我試圖在運行時刪除/替換「硬連線」XML片段時,我的應用程序崩潰,出現異常。
我還沒有真正與XML片段合作過幾個月,但今天,在百靈,我決定玩弄,我發現我能夠交換XML片段的其他片段和...它的作品?我無法在網上找到任何討論此行爲近期變化的內容。它只是工作。
我的佈局代碼是在這裏:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/fl_frag"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="mobappdev.demo.myapplication.MainActivity">
<fragment
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:id="@+id/frag"
android:name="mobappdev.demo.myapplication.BlankFragment"/>
<Button
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:text="@string/click_me"
android:onClick="clickMe"/>
</LinearLayout>
這裏是替換片段中的代碼:
public void clickMe(View view) {
FragmentManager manager = getSupportFragmentManager();
BlankFragment newFrag = BlankFragment.newInstance();
Fragment oldFrag = manager.findFragmentById(R.id.frag);
Log.i("TESTING", "old frag is null: " + (oldFrag == null));
manager.beginTransaction()
.replace(R.id.fl_frag, newFrag)
.commit();
}
它的工作沒有任何問題。我已經嘗試了各種變體(例如將XML片段放在FrameLayout中),並且它似乎都可以正常工作。我甚至嘗試過諸如刪除/添加以及刪除等變體,並且它們都可以毫無問題地運行。
那麼我錯過了什麼?
也許他們修復了它? – DeeV
嗯,這不是一個錯誤,它是一個功能。但即使他們改變了它,目前的文件(上面鏈接)仍然說它不能完成。 –
如果是這種情況,也許可以使用常規的FragmentManager而不是支持來嘗試,並查看它是否仍然存在。支持FragmentManager畢竟只是系統的一個模擬,所以它必須以不同的方式做事。 – DeeV