Android替换片段

时间:2015-12-08 12:03:40

标签: android android-fragments fragmenttransaction

我的MainActivity包含2个片段。上面的一个包含一张地图,应该始终可见。较低的一个应该最初显示一个ListView,并在FAB上点击它应该更改为Fragment,在其中可以添加一个新条目。

enter image description here

我尝试在按钮单击时在MainActivity中运行以下代码:

    AddFragment newFragment = new AddFragment();
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
    transaction.replace(R.id.fragment_container, newFragment);
    transaction.addToBackStack(null);
    transaction.commit();
    getSupportFragmentManager().executePendingTransactions();

但一切都没有发生。

这是我的XML:

    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/map"
        class="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="2" />


    <LinearLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1">

        <fragment
            android:id="@+id/frag_list"
            android:name="com.example.imissit.ListFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </LinearLayout>
</LinearLayout>

1 个答案:

答案 0 :(得分:2)

从xml文件中删除fragment标记,并以编程方式添加ListFragment,例如:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(…);
    if ( null == savedInstanceState ) {
        getSupportFragmentManager().beginTransaction()
                .replace(CONTAINER_ID, FRAGMENT_INSTANCE, TAG) // Change the values
                .commit();
    }
}

同时将LinearLayout更改为FrameLayout