2012-03-06 4 views
12

최근에 내 응용 프로그램에 단편을 추가했습니다. 새로운 응용 프로그램의 경우 내 조각이 표시된 즉시 을 알려야합니다. 그래서 내 조각이 다시 표시 되 자마자 몇 가지 계산을 수행 할 수 있습니다.조각 onHiddenChanged가 호출되지 않았습니다.

내 조각은 TabIndicator와 함께 사용되며 단 하나의 FragmentClass인데 몇 번 사용됩니다.

@Override 
public void onHiddenChanged(boolean hidden) { 
    super.onHiddenChanged(hidden); 
} 

답변

6

아직도 답을 찾고 :

다음은 일반 표준 재정의 클래스입니까? onHiddenChanged는 조각이 처음 표시 될 때 호출되지 않습니다. 상태가 바뀔 때만. 문서에서

: 프래그먼트가 변경된 때의 숨겨진 상태 (isHidden 의해 반환())라고

. 단편은 처음부터 숨겨져 있지 않습니다. 이것은 프래그먼트가 상태를 변경 할 때마다 호출됩니다.

+0

답변을 주셔서 감사합니다. 그래서 나는 내 viewpager가 청취자를 가지고 있기 때문에 그것을 해결했다. 이 리스너에서는 onHidden-Changed 메서드를 호출합니다. 바보 같지만 그래, 지금은 효과가있다. – mikepenz

+0

전화 한 적이 없습니다. –

9

동일한 문제가있었습니다.

필자는 스탠다드 가이드 라인 실제 작업을 조각 (Building a Flexible UI)과 함께 사용했다. 두 조각 (ListItemsFragment 및 InfoItemFragment)이 있습니다. 일반 화면 크기를 사용하는 경우 InfoItemFragment의 ListItemsFragment를 바꿉니다. onHiddenChanged 메서드는 자동으로 호출하지 않습니다.

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

우리는 hide 메소드 FragmentTransaction을 호출해야한다고 생각합니다. 예 :

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(); 

이제는 onHiddenChanged 메서드가 제대로 작동합니다. 사용자가 다시 버튼을 클릭하면 mListItemsFragment가 다시 표시되고 onHiddenChanged 메소드가 자동으로 호출됩니다. 문서에서

는 말했다 : 조각이 난 우리가 수동 변경 값이 다음 메소드가 호출 될 것입니다 생각합니다 그

에서 상태를 변경할 때마다이 호출됩니다 .

0

비슷한 문제를 해결하기 위해 setUserVisibleHint 메서드를 사용할 수 있습니다. 그것이 당신을 도울 수 있기를 바랍니다.

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 
    if (isVisibleToUser) { 
     // Do some your work 
    } else { 
     // Do your Work 
    } 
} 
관련 문제