6

ビューページャーに 5 つのフラグメントがあり、そのうちの 1 つはボタン クリックで完全に置き換えたいと考えています。また、戻るボタンで子フラグメントを非表示にできるようにしたいと考えています。ここで、このフラグメントのレイアウト:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:id="@+id/contacts_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@null">
<LinearLayout
    android:id="@+id/import_contacts"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"/>

<include layout="@layout/listview_filter"/>

<Button
    android:id="@+id/btn_my_clusters"
    android:background="@drawable/btn_wide_arrow_bg"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="@color/TEXT"
    android:text="@string/btn_my_clusters_text"
    android:layout_marginBottom="10dp"/>

<ProgressBar
    android:id="@+id/progress_bar"
    android:layout_height="fill_parent"
    android:layout_width="wrap_content"
    android:layout_gravity="center"/>

<ListView
    android:id="@+id/contacts_list"
    android:divider="@null"
    android:listSelector="@android:color/transparent"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:visibility="gone"/>
</LinearLayout>

このように置き換えようとするとcontacts_layout

ImportContactsFragment importContactsFragment = new  ImportContactsFragment();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.addToBackStack(null);
transaction.replace(R.id.contacts_layout, importContactsFragment).commit();

動作しません (つまり、エラーはありませんが、ImportContactsFragment がまったく表示されません)。しかし、次import_contactsのようにビューを置き換えようとすると:

ImportContactsFragment importContactsFragment = new  ImportContactsFragment();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.addToBackStack(null);
transaction.replace(R.id.import_contacts, importContactsFragment).commit();

すべて問題ありません。ImportContactsFragment が表示されます。

すべてのフラグメントコンテンツを子フラグメントに置き換えることは可能でしょうか? 多分私は他の方法でそれを行うことができますか?

4

1 に答える 1

4

トランザクションはreplaceターゲット レイアウト コンテナーから現在のビューを削除しないため、最初のコードを使用すると、新しいビューがFragmentcontacts_layout に追加されLinearLayoutますが、以前のビューが画面全体 (高さ) をカバーしているため、表示されません。

LinearLayout新しいコードを追加する2 番目のコードはFragment、親の最初の子であり、LinearLayoutスペースがあるため、表示されます。

あなたがしていることについてFragmentは、後で非常に簡単に置き換えることができるラッパーレイアウトに配置されたクラスで初期レイアウトをラップすることをお勧めします。

于 2013-04-20T07:51:46.620 に答える