2

ユーザーがリストの製品をクリックするたびに開く製品詳細ページに取り組んでいます。ページの上部に製品画像があり、画像の下に 3 つのタブがあり、タブの下にフラグメント コンテナーがあり、タブを切り替えます。

問題:初めてアクティビティをロードすると、showFragment(..)メソッドが呼び出さfragment_containerれ、InfoFragment が読み込まれます。次に別のタブをクリックしてshowFragment()メソッドを再度呼び出すと、コンテナが空白になります。面白いことに、リストに戻って同じ製品をもう一度クリックすると、infoFragment以前と同じようにコンテナに読み込まれますが、タブをクリックするとバターのように切り替わります (問題なし)。何がうまくいかないのですか??

これは、onCreate()開始時に infoFragment を表示するために呼び出すメソッドです。

showFragment(R.id.product_detail_fragment_container, mInfoFragment, INFO_TAG, mCurrentFragmentTag, false);

別の (2 番目の) タブをクリックすると、同じメソッドが異なるパラメーターで呼び出されます。

showFragment(R.id.product_detail_fragment_container, mCaraFragment, CARA_TAG, mCurrentFragmentTag, false);

そしてshowFragment(...)方法:

protected void showFragment(int resId, Fragment fragment, String tag, String lastTag, boolean addToBackStack) 
{
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction transaction = fragmentManager.beginTransaction();

    if (lastTag != null) {
        Fragment lastFragment = fragmentManager.findFragmentByTag(lastTag);
        if (lastFragment != null) {
            transaction.setCustomAnimations(R.anim.fade_in, R.anim.fade_out);
            transaction.hide(lastFragment);
        }
    }

    if (fragment.isAdded()) {
        transaction.show(fragment);
    } else {
        transaction.add(resId, fragment, tag).setBreadCrumbShortTitle(tag);
    }

    if (addToBackStack) {
        transaction.addToBackStack(tag);
    }

    transaction.commit();
}

コンテナーの XML:

<FrameLayout
  android:id="@+id/product_detail_fragment_container"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:background="@android:color/white" />

コードをデバッグしようとしましたtransaction.add(resId, fragment, tag)が、タブを切り替えるとメソッドが呼び出されますが、コンテナーが空白になります。次に、詳細ページを閉じて再度開始すると、メソッドが呼び出され、コンテンツが表示されます...別の製品を試してみると、戻ってもう一度クリックするまでフラグメントが表示されません

4

0 に答える 0