Android 替换片段
Android replace Fragment
我的 MainActivity 包含 2 个片段。上面的包含一张地图,应该一直可见。下方的最初应该显示一个 ListView,在 FAB 上单击它应该更改为一个 Fragment,可以在其中添加一个新条目。
我尝试在单击按钮时 运行 在我的 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>
从 xml 文件中删除 fragment
标签,并以编程方式添加 ListFragment
,f.e.:
@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
我的 MainActivity 包含 2 个片段。上面的包含一张地图,应该一直可见。下方的最初应该显示一个 ListView,在 FAB 上单击它应该更改为一个 Fragment,可以在其中添加一个新条目。
我尝试在单击按钮时 运行 在我的 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>
从 xml 文件中删除 fragment
标签,并以编程方式添加 ListFragment
,f.e.:
@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