마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

setUserVisibleHint 호출 방법 설정(onCreat()되기 이전에 setUserVisibleHint의 호출을 막을 수 있는 방법)

0 추천

기본클래스 내에서 setUserVisibleHint를 사용하여 탭레이아웃의 데이터를 설정해주고 있는데요 setUserVisibleHint를 사용하니 onCreat이전에 해당 메서드가 먼저 호출되어 SharedPreferences를 종종 못받아 올 때가 있습니다ㅠㅠ 

 

oncreate되기 이전에  setUserVisibleHint를 막을 수 있는 방법이 있나요?

아니면 현재 setUserVisibleHint에서 getActivity()를 못받아오는데, 받아올 수 있는 방법이 있나요?

sj6071 (620 포인트) 님이 2018년 1월 10일 질문

1개의 답변

0 추천

setUserVisibleHint가 Fragment.setUserVisibleHint를 말하는 건가요?

그렇다면 뭔가 잘못 생각하고 계십니다.

 

https://developer.android.com/reference/android/app/Fragment.html#setUserVisibleHint(boolean)

Note: This method may be called outside of the fragment lifecycle and thus has no ordering guarantees with regard to fragment lifecycle method calls.

 

setUserVisibleHint는 안드로이드 OS에서 아무때나 호출될 수 있으며, 이를 막을 수 없습니다.

아무때나 호출되어도 정상동작하도록 코드를 수정해야 합니다.

 

익명사용자 님이 2018년 1월 10일 답변
네.. Fragment.setUserVisibleHint인데요, setUserVisibleHint가 onCreat 이전에 호출되더라구요.. 혹시 이를 막을수 있는 방법이나,
혹은 그럼 페이저가 변경될 때 대신 사용할 수 있는 코드를 알 수 있을까요?

현재  extends FragmentStatePagerAdapter한 클래스 내에서 getItem에서 setUserVisibleHint를 구현한 프래그먼트를 리턴하여 페이저를 보여주고 있는데요, 그럼 getItem에서 어떤 식으로 구현해야할까요?
getItem을 수정하는게 아니라 getItem이 리턴하는 Fragment 하위 클래스의 코드를 수정해야 합니다.

setUserVisibleHint에서 getActivity  호출했을 때 null이 아닌 값이 나오는 경우에만 동작하게 하면 될 것 같네요.
getActivity를 호출했을 때 null일 때가 너무 많아서요ㅠㅠ
그럼 어플의 안정성이 너무 떨어지지 않나요??
...