23

I recently added Fragments to my applications. For a new application i'll need to get notified as soon as my fragment is shown. So i can do some calculations as soon as my fragment is shown again.

My Fragment is used with a TabIndicator and it's only one FragmentClass which is used a few times.

Here's the normal standard override class:

@Override
public void onHiddenChanged(boolean hidden) {
    super.onHiddenChanged(hidden);
}
tshepang
  • 12,111
  • 21
  • 91
  • 136
mikepenz
  • 12,708
  • 14
  • 77
  • 117

4 Answers4

11

I had same problem.

I used standart guideline practic work with fragment (Building a Flexible UI). I have two fragment (ListItemsFragment and InfoItemFragment). When used normal screen size, I replace ListItemsFragment at InfoItemFragment and the method onHiddenChanged doesn't call automatic.

FragmentTransaction mFragmentTransaction = getFragmentManager().beginTransaction();
mFragmentTransaction.replace(R.id.container_fragment, new InfoItemFragment(), "tag_fr_infoItem");
mFragmentTransaction.addToBackStack(null);
mFragmentTransaction.commit();

I think we must called in hide method FragmentTransaction. For example:

    ListItemsFragment  mListItemsFragment;
    FragmentTransaction mFragmentTransaction = getFragmentManager().beginTransaction();
    mFragmentTransaction.replace(R.id.container_fragment, new InfoItemFragment(), "tag_fr_infoItem");
    if (mListItemsFragment != null) {
        mFragmentTransaction.hide(mListItemsFragment);
    }
    mFragmentTransaction.addToBackStack(null);
    mFragmentTransaction.commit();

And now the method onHiddenChanged work fine. When user click back button mListItemsFragment again show and method onHiddenChanged called automatic.

In documentation said: this will be called whenever the fragment changes state from that

I think we must manual change value then method will be called.

Community
  • 1
  • 1
AndreyNik
  • 1,581
  • 2
  • 17
  • 24
10

Still looking for an answer? onHiddenChanged doesn't get called the first time an fragment is shown. Only when it changes state.

From the documentation:

Called when the hidden state (as returned by isHidden()) of the fragment has changed. Fragments start out not hidden; this will be called whenever the fragment changes state from that.

Jørgen
  • 2,157
  • 1
  • 23
  • 24
  • 3
    Thanks for the answer, but the method wasn't called ever. So i solved it due the fact that my viewpager has a listener. In this listener i call the onHidden-Changed method. Stupid but yeah, it works now. – mikepenz Mar 17 '12 at 08:02
  • 12
    It's never been called. – Bagusflyer Oct 02 '13 at 01:43
4

You can use setUserVisibleHint method to solve some similar problem. Hope it can help you.

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) {
        // Do some your work
    } else {
        // Do your Work
    }
}
BertKing
  • 513
  • 5
  • 13
0

if you use hide() and show() to hide or show your fragment, Any lifecycle method dont't work.so is setUserVisibleHint() .

不爱读书
  • 41
  • 1
  • 1
  • 3