У меня есть два фрагмента (FRAGMENT_1, FRAGMENT_2). FRAGMENT_1 запускает таймер, и когда я открываю FRAGMENT_2, я хочу, чтобы FRAGMENT_1 продолжал его запускать.Android onDetach() не вызывается при замене фрагмента
FRAGMENT_1 в OnCreate():
if (savedInstanceState == null) {
FRAGMENT_1 fragment1= new FRAGMENT_1();
fragment1.setRetainInstance(true);
getSupportFragmentManager()
.beginTransaction()
.add(R.id.main_fragment_container, fragment1, FRAGMENT_1_TAG)
.addToBackStack(null)
.commit();
}
Это моя навигация между фрагментами:
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
Fragment fragment = null;
String fragTag = "";
switch (id) {
case R.id.nav_frag_1:
//this method returns
//getSupportFragmentManager().getFragments()
//.contains(getSupportFragmentManager().findFragmentByTag(tag))
if (isFragmentCreated(FRAGMENT_1_TAG)) {
fragment = getSupportFragmentManager()
.findFragmentByTag(FRAGMENT_1_TAG);
} else {
fragment = new FRAGMENT_1();
}
fragTag = FRAGMENT_1_TAG;
break;
case R.id.nav_frag_2:
fragment = new FRAGMENT_2();
fragTag = FRAGMENT_2_TAG;
break;
case R.id.nav_settings:
Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);
break;
}
if (fragment != null && !fragment.isVisible()) {
FragmentTransaction fragmentTransaction = getSupportFragmentManager()
.beginTransaction()
.replace(R.id.main_fragment_container, fragment, fragTag);
if (fragment.getTag().equals(FRAGMENT_1_TAG)){
fragmentTransaction.addToBackStack(null);
}
fragmentTransaction.commit();
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
Когда я перемещаться между этими фрагментами, FRAGMENT_2 не вызывает onDetach()
поэтому не удаляется, но если я удалю следующий фрагмент кода:
if (fragment.getTag().equals(TIMER_FRAGMENT_TAG)){
fragmentTransaction.addToBackStack(null);
}
затем FRAGMENT_2 вызывает onDetach()
, а затем удаляется. Почему это происходит?
Я не знаю, почему это не понравилось. Это сработало в моем случае, спасибо! – ioanb7