Вы добавляете два фрагмента в один контейнер.Это точное поведение в соответствии с вашим кодом.Если вам нужно показать только фрагмент, добавленный позже, вам нужно replace
фрагмент вместо add
.
Я не знаю точный ваш вариант использования.Тем не менее, я предполагаю, что вы пытаетесь показать фрагмент1 и фрагмент2, основываясь на некоторой проверке.В этом случае вы можете рассмотреть возможность использования в вашем MainActivity
двух функций, подобных приведенным ниже.
public boolean fragment1Loaded = false;
public void switchToFrag1() {
fragment1Loaded = true;
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, Fragment1.newInstance())
.commit();
}
public void switchToFrag2() {
fragment1Loaded = false;
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, Fragment2.newInstance())
.commit();
}
Теперь в функции onCreate
вам нужно вызывать функцию на основе необходимого условия.
if (showFirstFragment) switchToFrag1();
else switchToFrag2();
Вы можете переключаться в любое время с MainActivity
.
Надеюсь, это поможет!
Обновление
Вы можете обрабатывать нажатие кнопки "назад" в вашем MainActivity
и обрабатывать логику самостоятельно.Переопределите функцию onBackPressed
и затем переключайте фрагменты в зависимости от вашей необходимости.Например, см. Модифицированные функции выше.Я держу ссылку на то, какой фрагмент загружен на экране прямо сейчас.Затем переопределите функцию onBackPressed
следующим образом.
@Override
public void onBackPressed() {
if (fragment1Loaded) super.onBackPressed();
else switchToFrag1();
}
Надеюсь, вы поняли идею.