Вам нужно присвоить вашему Фрагменту уникальный тег и проверить, уже добавлен ли этот Фрагмент к вашей Деятельности.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String tag = "my_fragment";
FragmentManager fragmentManager = getFragmentManager();
if(fragmentManager.findFragmentByTag(tag) == null) {
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
Fragment homeFragment = new Home();
fragmentTransaction.add(R.id.mainFragement, homeFragment, tag);
fragmentTransaction.commit();
}
}
Проверка того, является ли savedInstanceState
ноль, не является безопасным способом проверки того, установлен ли уже ваш фрагмент - он будет работать в большинстве случаев, но в некоторых случаях (например, когда устройство не хватает памяти) Android может убить ваша активность, которая может сломать ваше приложение.
Чтобы увидеть это в действии, установите флажок «Не выполнять действия» в параметрах разработки устройства (параметр доступен в Android 4.0+, не уверен в более ранних версиях). Когда вы открываете новое действие, ваше первое действие уничтожается. Когда вы вернетесь к нему (нажав назад), он будет создан снова, а для элемента saveInstanceState установлено значение , а не null. Тем не менее, ваш фрагмент больше не находится в активности, и вы должны добавить его снова.
РЕДАКТИРОВАТЬ - Показывает оригинальный принцип, но с SupportFragmentManager
public class ActivityAwesome extends AppCompatActivity
{
private final String TAG = getClass().getSimpleName();
private FragmentHome mHomeFragment;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_layout);
FragmentManager fragmentManager = getSupportFragmentManager();
Fragment fragment = fragmentManager.findFragmentByTag(TAG);
if(fragment == null)
{
// Create the detail fragment and add it to the activity using a fragment transaction.
mHomeFragment = new FragmentHome();
fragmentManager.beginTransaction()
.add(R.id.fragment_container, mHomeFragment, TAG)
.commit();
}
else
{
// get our old fragment back !
mHomeFragment = (FragmentHome)fragment;
}
}
}
это особенно полезно, если вы хотите манипулировать фрагментом (в данном случае mHomeFragment
) после вращения устройства