액티비티와 프래그먼트가 상호작용하도록 하기

액티비티와 프래그먼트가 상호 작용하는 두 가지 방법이 있습니다. 활동이 프래그먼트에서 메소드를 호출하거나 프래그먼트가 상위 활동에서 메소드를 호출합니다.
액티비티가 프래그먼트의 메서드를 호출하면 프래그먼트의 메서드를 통해 데이터를 프래그먼트로 전달하고 프래그먼트에서 데이터를 받을 수 있습니다. 프래그먼트가 활동에서 메소드를 호출하는 경우에도 마찬가지입니다. 이제 시작하겠습니다.

커뮤니케이션 조각화 활동



액티비티가 프래그먼트와 통신하려면 프래그먼트에 대한 참조(또는 포인터)가 필요합니다. findFragmentById() 또는 getFragmentManager() 호출 결과에서 메서드 getSupportFragmentManager()를 호출하여 조각에 대한 이 참조를 얻습니다.
id가 demofragment인 DemoFragment라는 프래그먼트가 있는 경우 아래 코드를 사용하여 해당 프래그먼트에 대한 참조를 얻을 수 있습니다.

FragmentManager fragmentManager = getSupportFragmentManager();
DemoFragment demoFragment = (DemoFragment)fragmentManager.findFragmentById(R.id.demofragment);


코드 분류
함수getSupportFragmentManager()를 호출하면 FragmentManager 인스턴스가 반환됩니다. 해당 인스턴스에는 findFragmentById() 라는 메서드가 있습니다.

It's important to know that the id of a fragment must be assigned in the <fragment/> tag in the activity's xml layout file. This way, one fragment can have different ids in different activities.



프래그먼트 관리자에서 메소드findFragmentById를 호출할 때 원하는 프래그먼트 클래스로 유형 변환해야 합니다. 이 메서드를 호출한 결과는 조각에 대한 참조가 됩니다.

액티비티에 프래그먼트에 대한 해당 참조가 있으면 모든 공개 필드 및 속성에 액세스하고 모든 공개 메서드를 호출할 수 있습니다. 이것이 액티비티가 프래그먼트와 통신할 수 있는 방법입니다.

Fragment to Activity 커뮤니케이션



프래그먼트가 상위 활동과 통신하려면 해당 활동에 대한 참조를 가져와야 합니다.
DemoActivity라는 활동이 있고 demoMethod()라는 공개 메서드 중 하나를 호출하려고 한다고 가정하면 아래 코드 스니펫으로 작업을 수행할 수 있습니다.

((DemoActivity)getActivity()).demoMethod();


코드 분류

코드를 설명하기 위해 코드를 두 부분으로 나누어 보겠습니다. 점( . ) 앞의 모든 것이 첫 번째 부분이고 그 뒤의 모든 것이 두 번째 부분입니다. 첫 번째 부분을 살펴보겠습니다.
((DemoActivity)getActivity()) :
이 부분에서는 메서드getActivity()를 호출하고 이를 유형 변환을 통해 활동의 인스턴스로 변환합니다. 이 작업에서 얻을 결과는 활동에 대한 참조가 됩니다. 이제 두 번째 부분을 살펴보겠습니다.
demoMethod() :
이는 DemoActivity 클래스에 정의된 전용 메서드입니다. 방금 얻은 활동 참조를 통해 호출합니다.

조각 수명 주기 방법



프래그먼트 수명 주기 메서드는 활동 수명 주기 메서드에 연결됩니다. 다음은 프래그먼트 수명 주기 메서드 목록입니다.
onAttach(Context) : 이 메서드는 조각이 컨텍스트와 연결될 때 호출됩니다.
onCreate(Bundle) : 이 메서드는 조각의 onCreate()와 동일합니다.
onCreateView(LayoutInflater, ViewGroup, Bundle) : 프래그먼트의 보기를 확장하기 위해 호출되는 메소드입니다.
onActivityCreated(Bundle) : 이 메소드는 상위 활동onCreate의 메소드가 완료되면 호출됩니다.
onStart() : 프래그먼트가 백그라운드에서 완전히 생성될 때 호출됩니다.
onResume() : 프래그먼트가 전경에 표시될 때 호출됩니다.
onPause() : 프래그먼트가 전경을 벗어날 때 호출됩니다.
onStop() : 프래그먼트가 사용자에게 더 이상 표시되지 않을 때 호출됩니다(백그라운드에 진입할 때).
onDestroyView : 이 메서드는 frgament의 UI가 파괴될 때 호출됩니다. 이는 개발자에게 프래그먼트의 보기와 연관된 모든 리소스를 지울 수 있는 기회를 제공합니다.
onDestroy() : 이 메소드는 프래그먼트의 클래스와 연관된 다른 리소스를 지우는 데 사용됩니다.
onDetach() : 이 메소드는 프래그먼트가 활동과 연결 해제될 때 호출됩니다.

아래 다이어그램은 프래그먼트 수명 주기가 활동 수명 주기 및 수명 주기가 교차하는 지점과 어떻게 관련되어 있는지 보여줍니다. 프래그먼트 수명 주기 콜백은 오른쪽에 있습니다.


Fragment 클래스는 Context 인터페이스를 구현하지 않으므로 프래그먼트는 컨텍스트 유형이 아니므로 앱 환경에 대한 전역 정보에 액세스할 수 없습니다. 프래그먼트가 이 데이터에 액세스하려면 상위 활동과 같은 다른 객체의 컨텍스트를 사용해야 합니다.

다음 단계: 조각 나열

좋은 웹페이지 즐겨찾기