Фрагмент заменен все еще видимым на фоне

Я пытаюсь заменить один фрагмент на другой, используя новый шаблон ящика навигации. Кажется, что это работает, но когда я выбираю другой вариант из ящика, новый фрагмент загружается, но оба фрагмента видны. Я не использую статический фрагмент, поэтому я не знаю, где проблема.

Фрагменты загружаются с помощью метода onItemClick, реализующего AdapterView.OnItemClickListener в моей активности.

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    Fragment fragmentToShow = null;
    // Load desired fragment
    switch (position) {
        case 0: // Authors
            if (fragmentAuthors == null) fragmentAuthors = new FragmentAuthors();
            fragmentToShow = fragmentAuthors;
            break;
        case 1: // Books
            if (fragmentBooks == null) fragmentBooks = new FragmentBooks();
            fragmentToShow = fragmentBooks;
            break;
    }
    FragmentTransaction ft = fragmentManager.beginTransaction();
    ft.replace(R.id.ActivityMain_Drawer_FrameMain, fragmentToShow);
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
    ft.commit();
    mDrawerLayout.closeDrawers();
}

Layout   

<!-- The main content view -->
<FrameLayout
    android:id="@+id/ActivityMain_Drawer_FrameMain"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/background_light" />

<!-- The navigation drawer -->
<FrameLayout
    android:id="@+id/ActivityMain_Drawer_FrameMenu"
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:background="@android:color/background_light">
    <ListView
        android:id="@+id/ActivityMain_Drawer_FrameMenu_List"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp" />
</FrameLayout>

Скриншоты

https://dl.dropboxusercontent.com/u/1763308/Screenshots/device-2013-05-27-113128.png https://dl.dropboxusercontent.com/u/1763308/Screenshots/device-2013-05-27-113139.png

Ответ 1

У меня такая же проблема с некоторыми фрагментами. Чтобы решить эту проблему, я просто установил цвет фона для всех макетов фрагментов, например:

android:background="?android:attr/colorBackground"

Ответ 2

Я попробовал много предлагаемых ответов здесь, на SO, и после затраченных часов я, наконец, смог решить свою проблему, не указав цвет фона на макете фрагмента.

Мое решение состоит в том, чтобы переопределить метод onBackPressed в Activity, содержащем контейнер фрагмента, поэтому каждый раз, когда нажимается кнопка назад, я удаляю текущий отображаемый фрагмент и возвращу предыдущий:

@Override
public void onBackPressed() {
    List<Fragment> fragments = getSupportFragmentManager().getFragments();
    if (fragments.size() > 1) {

        final Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.my_framelayout);
        if (currentFragment != null) {
            getSupportFragmentManager().beginTransaction().remove(currentFragment).commit();
            getSupportFragmentManager().popBackStack();
        }
    } else {
        super.onBackPressed();
    }
}

Надеюсь, что это поможет.

Ответ 3

Попробуйте изменить android: background = "@android: color/background_light" цвет другому цвету. Может быть, это решает вашу проблему.