Moja aplikacja pokazuje wiele zdjęć na ekranie głównym. Użytkownik może wyświetlić więcej informacji o produkcie, dotykając obrazu. Główny fragment ekranu zostaje ukryty, a fragment szczegółów produktu staje się widoczny. Kliknięcie klawisza wstecz powoduje, że główny fragment ekranu staje się ponownie widoczny.Dlaczego funkcja onResume() jest wywoływana w ukrytych fragmentach?
Fragment transacion jest realizowany w następujący sposób:
@Override
public void showProduct(Product p, boolean isParentTabbed) {
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
// the new fragment
Fragment mFragment = new ProductDetailFragment(p,isParentTabbed);
//hide main screen fragment and add product detail fragment
transaction.hide(currentlyOpenedFragment);
transaction.add(android.R.id.content,mFragment);
//set new fragment as current "on top" fragment
currentlyOpenedFragment = mFragment;
//start animation
transaction.setCustomAnimations(R.anim.slide_in_bottom, R.anim.slide_out_top);
transaction.addToBackStack(null);
transaction.commit();
}
Wszystko działa poprawnie, chyba że użytkownik openes okno akcję (średnia android zamiaru akcji) w szczegółach produktu fragmentu i zamyka okno klikając na plecach klawisz. Z jakiegoś powodu wywoływana jest metoda onResume w głównym fragmencie ekranu (który jest ukryty). I rozwiązać problem dodając następujący kod do metody onResume w głównym fragmencie ekranu:
super.onResume();
if(this.isHidden()){
Log.d("tab","dont resume tab0fragment because it is hidden");
return;
}
Działa to dobrze, ale pozostaje pytanie: Dlaczego onResume() nazywa się w ukrytym fragmencie, gdy zamyka użytkowników okno dialogowe udostępniania w innym fragmencie?