본문 바로가기
Android 개발/android :: Tip

[안드로이드 프래그먼트] Activity <-> Fragment 각각에서 각각의 함수/변수 접근

by 독학하는 1인 개발자 2019. 9. 16.

Android 개발 Tip.

 

- Activity Fragment Communication

 

액티비티 <-> 프래그먼트 함수/변수 접근 방법

 

Warning(경고) 해결 방법

 

 

 

 

 

 

fragment에서 activity의 함수나 변수에 접근하거나

 

activity에서 fragment의 함수나 변수에 접근할 필요가 있을 때가 많다.

 

방법은 간단하다.

 

 

 

 

1. Fragment -> Activity 접근

 

Fragment에서 Activity의 함수 호출이나 변수 접근

 

((Activity이름)getActivity()).함수/변수이름();

 

예시

1
((MyActivity)getActivity()).myFunction();
cs

 

 


2. Activity -> Fragment 접근

 

Activity에서 Fragment의 함수 호출이나 변수 접근


훨씬 복잡하다.

 

- findFragmentTag를 이용하거나,

- findFragmentById를 이용할 수 있다.

 

 


2-1. findFragmentTag 를 이용하는 방법

 

예시

1
((MyFragment) getSupportFragmentManager().findFragmentByTag("myFragmentTag")).myFunction();
cs

 

 

 

 

2-2 findFragmentById 를 이용하는 방법

 

예시

1
2
MyFragment mf = (MyFragment) getSupportFragmentManager().findFragmentById(R.id.myfragment);
mf.myFunction();
cs

 

 

 

 

안드로이드는 프래그먼트를 장려하지만 친절하진 않아 보인다.

 

심지어 저게 가장 일반적인 방법인데

 

프래그먼트에서 액티비티 함수를 호출할 때

저렇게 쓰면 Warning이 뜬다.

 

뭐하자는거???

 

 

Method invocation 'myfunction' may produce 'NullPointerException'

 

프래그먼트는 일반적으로 액티비에 attach하거나 detach하면서 쓰는 것이기 때문에

프래그먼트가 액티비티에 attached 가 되지 않은 상태면 NPE 에러가 뜰 수 있다는 것이다.

 

 

NPE Warning 없애는 방법

 

getActivity()가 Null이 된 경우를 피하기 위해

1
2
3
if(getActivity() != null){ 
     // insert your code.
}
cs

 

로 코드를 감싸주면 warning이 사라진다.

 

 

 

 

 

댓글