만족
[Android] getFragmentManager().findFragmentById() return null 본문
[Android] getFragmentManager().findFragmentById() return null
FrontEnd/Android Satisfaction 2019. 7. 7. 21:02일단, fragmentTransaction단에서 커밋조차 실패한 경우에는 논외로 한다.
xml에서 인플레이션했던, transaction으로 commit했던 간에,
getFragmentManager().findFragmentById() 혹은 getFragmentManager().findFragmentByTag()를 분명 일치하게 입력했는데도 null을 return 하는 경우가 있다.
Fragment코드를 생성할 때, Fragment클래스를 auto import하면 (alt+enter를 이용한 경우도 마찬가지)
import android.support.v4.app.Fragment;
가 자동으로 import된다.
그런데, getFragmentManager().findFragmentById() 는 (getFragmentManager().findFragmentByTag() 도 마찬가지로)
현재 activity에 올라와 있는 fragment 중에서 자신과 같은 패키지 내의 Fragment를 상속받은 fragment를 찾는다.
(즉, android.app.AppCompatActivity을 상속한 패키지에서 android.support.v4.app.Fragment를 찾으려 하는 것 처럼, 다른 패키지의 컴포넌트로 구현된 액티비티에서 프래그먼트를 찾으려 하면 에러가 난다)
따라서 해당 Fragment는 해당 method로 찾을 수 없기 때문에 null을 리턴하는 것이다.
해결책은 단순히
import android.support.v4.app.Fragment; 를
import android.app.Fragment; 로 바꾸어 주는 것 처럼 서로 패키지를 일치시키면 된다.
더 간단하게는 안드로이드 스튜디오에서 'Migrate androidx'를 사용하여 일원화시켜 줄 수도 있다.
++++++++
android.app.Fragment의 getContext의 경우 minApiLevel이 조금 높게 잡혀 있다.
따라서 해당 프래그먼트에서 Toast와 같은 context가 필요한 메서드를 사용할 경우에는
getActivity().getApplicationContext()나 getActivty()를 사용하면 된다
(Activity는 Context의 서브클래스이기 때문에 Activity를 전달해도 된다)
위의 문제가 아니라면 아래의 포스트도 확인해보면 도움이 될지도 모른다
https://satisfactoryplace.tistory.com/128
'FrontEnd > Android' 카테고리의 다른 글
[Android Studio] ScrollView/ListView height 불일치 문제 (0) | 2019.07.11 |
---|---|
[Android Studio] ScrollView 사용시 물결무늬 없애기 (0) | 2019.07.11 |
[Android studio] 인앱 결제 구현 (0) | 2018.05.24 |
[Android Studio] ButterKnife Libaray (0) | 2018.02.22 |
[Android Studio] Firebase I/O data type (0) | 2018.02.03 |