2013-04-28 13 views
5

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?

Odpowiedz

3

Ukryte fragmenty nadal śledzą cykl życia fragmentu. Spójrz na schemat blokowy z documentation. User navigates backwards or the fragment is removed/replaced. Zostaje wywołana onDestroyView(), gdzie The fragment returns to the layout from the back stack, jest miejscem, w którym siedzi główny fragment ekranu.

Powiązane problemy