본문 바로가기
개발 관련 이야기

Android - Fragment에서 Activity로 값 전달하기

by 꿈틀쓰 2022. 11. 27.

하나의 Activity에 다수의 Fragment를 사용하는 구조는 이제 대다수의 앱에서 매우 일반적인 구조이다.

 

 

 

 

 

그렇다면 Fragment에서 Activity로 값을 전달하는 경우는 어떻게 하면 좋을까.

 

 

정답은 매우 단순하다.

바로 리스너를 사용하면 된다.

 

 

우선 리스너 인터페이스를 정의한다.

public interface DataPassListener {
    void onMsg(String msg);
}

 

Fragment에서 Activity로 String 타입의 msg를 보내려고 할 때 사용하려고 한다.

 

 

Fragment에서는 onAttach에 해당 리스너를 등록해준다.

public class MyFragment extends Fragment {
	private DataPassListener listener;
    
    /**
     * 기타 코드
     */
    
    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);
        listener = (DataPassListener) context;
    }
    
    private void do() {
        // do task
        
        listener.onMsg("Hello, world");
        
        // do task
    }
}

 

onAttach는 onCreate가 시작되기도 전에 호출되므로 Fragment의 전체 라이프사이클에서 사용할 수 있다.

 

필요한 곳에서 해당 메소드를 호출한다.

 

 

 

이제 Activity에서 코드를 살펴보자.

public class MainActivity extends AppCompatActivity implements DataPassListener {
    /**
     * 기타 코드
     */ 
     
    @Override
    public void onMsg(String msg) {
    	Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG).show();
    }
}

 

토스트에 Hello, world가 뜨는 것을 볼 수 있을 것이다.

댓글