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

Fragment에서getActivity()메서드 질문

0 추천

위의 사진은 Fragment에서 setSupportActivity()를 이용해 툴바를 적용하려고 getActivity()로 현재 호스트 액티비티를 가져오는 부분인데요 이때 형변환을 하는 이유가 무엇인지 궁금해서 질문 드립니다  

songjae5426 (1,800 포인트) 님이 2023년 5월 29일 질문
songjae5426님이 2023년 5월 29일 수정

1개의 답변

+1 추천
 
채택된 답변

형변환(type casting)은 결과적으로는 데이터 타입이 달라서 그런겁니다. 

보통의 경우는 상속관계에서 자주 사용하게 되는데, Fragment.getActivity()를 호출하면 FragmentActivity를 리턴합니다.

public final @Nullable FragmentActivity getActivity()

그런데 님의 액티비티는 AppCompatActivity를 상속받았을 겁니다. AppCompatActivit는 아래와 같이 정의되어 있습니다.

public class AppCompatActivity extends FragmentActivity implements AppCompatCallback, TaskStackBuilder.SupportParentable, ActionBarDrawerToggle.DelegateProvider

FragmentActivity를 상속받았습니다. 그런데 setSupportActionBar는 AppCompatActivity의 멤버 메소드입니다. 따라서FragmentActivity에서는 호출이 안됩니다.

따라서 setSupportActionBar를 호출하기 위해서는 형변환이 되지 않으면 해당 메소드 호출이 안되겠죠.

FragmentActivity fragmentActivity = getActivity();
// fragmentActivity.setSupportActionBar(binding.toolbar); -> 호출불가
AppCompatActivity appCompatActivity = (AppCompatActivity) fragmentActivity;
appCompatActivity.setSupportActionBar(binding.toolbar);

이렇게 형변환이 가능한 이유는, 위에서도 언급했듯이, Fragmernt의 액티비티가 AppCompatActivty타입이기  때문입니다.

spark (224,800 포인트) 님이 2023년 5월 29일 답변
songjae5426님이 2023년 5월 29일 채택됨
자바 형변환에 대해서 질문드립니다
...