Приложението ми показва много изображения на главния екран. Потребителят може да види повече информация за продукт, като докосне изображение. Фрагментът на основния екран се скрива, а фрагментът с подробности за продукта става видим. Като щракнете върху клавиша за връщане назад, фрагментът от главния екран става видим отново.
Транзакцията на фрагмента се изпълнява, както следва:
@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();
}
Всичко работи добре, освен ако потребителят отвори диалоговия прозорец за споделяне (стандартно намерение за споделяне на Android) във фрагмента с подробности за продукта и затвори диалоговия прозорец, като щракне върху клавиша за връщане назад. По някаква причина се извиква методът onResume в основния фрагмент на екрана (който е скрит). Реших проблема, като добавих следния код към метода onResume в основния фрагмент на екрана:
super.onResume();
if(this.isHidden()){
Log.d("tab","dont resume tab0fragment because it is hidden");
return;
}
Това работи добре, но остава въпросът: Защо се извиква onResume() в скрития фрагмент, когато потребителят затвори диалогов прозорец за споделяне в друг фрагмент?