다음을 통해 공유


조각 관리

조각 관리에 도움이 되도록 Android는 FragmentManager 클래스를 제공합니다. 각 작업에는 해당 조각을 찾거나 동적으로 변경하는 Android.App.FragmentManager 인스턴스가 있습니다. 이러한 각 변경 내용의 세트를 트랜잭션이라고 하며, FragmentManager에서 관리하는 Android.App.FragmentTransation클래스에 포함된 API 중 하나를 사용하여 수행됩니다. 작업은 다음과 같은 트랜잭션을 시작할 수 있습니다.

FragmentTransaction fragmentTx = this.FragmentManager.BeginTransaction();

조각에 대한 이러한 변경 내용은 Add(), Remove(),Replace(). 등의 메서드를 사용하여 FragmentTransaction 인스턴스에서 수행됩니다. 그런 다음, 변경 내용은 Commit()를 사용하여 적용됩니다. 트랜잭션의 변경 내용은 즉시 수행되지 않습니다. 대신, 가능하면 빨리 작업의 UI 스레드에서 실행되도록 예약됩니다.

다음 예제에서는 기존 컨테이너에 조각을 추가하는 방법을 보여 줍니다.

// Create a new fragment and a transaction.
FragmentTransaction fragmentTx = this.FragmentManager.BeginTransaction();
DetailsFragment aDifferentDetailsFrag = new DetailsFragment();

// The fragment will have the ID of Resource.Id.fragment_container.
fragmentTx.Add(Resource.Id.fragment_container, aDifferentDetailsFrag);

// Commit the transaction.
fragmentTx.Commit();

Activity.OnSaveInstanceState()를 호출한 후 트랜잭션이 커밋되는 경우 예외가 throw됩니다. 이는 작업이 해당 상태를 저장할 때 Android에서 호스팅된 조각의 상태도 저장하기 때문에 발생합니다. 이 시점 이후에 조각 트랜잭션이 커밋되는 경우 작업을 복원할 때 이러한 트랜잭션의 상태가 손실됩니다.

FragmentTransaction.AddToBackStack()을 호출하여 조각 트랜잭션을 작업의 백 스택으로 저장할 수 있습니다. 이렇게 하면 뒤로 단추를 누를 때 조각 변경을 통해 사용자가 뒤로 이동할 수 있습니다. 이 메서드를 호출하지 않으면 제거되는 조각이 소멸되고 사용자가 작업을 통해 다시 탐색할 경우 사용할 수 없게 됩니다.

다음 예제에서는 FragmentTransactionAddToBackStack 메서드를 사용하여 한 조각을 바꾸고 백 스택의 첫 번째 조각 상태를 유지하는 방법을 보여 줍니다.

// Create a new fragment and a transaction.
FragmentTransaction fragmentTx = this.FragmentManager.BeginTransaction();
DetailsFragment aDifferentDetailsFrag = new DetailsFragment();

// Replace the fragment that is in the View fragment_container (if applicable).
fragmentTx.Replace(Resource.Id.fragment_container, aDifferentDetailsFrag);

// Add the transaction to the back stack.
fragmentTx.AddToBackStack(null);

// Commit the transaction.
fragmentTx.Commit();

조각과 통신

FragmentManager는 작업에 연결된 모든 조각을 인식하고 이러한 조각을 찾는 데 도움이 되는 두 가지 메서드를 제공합니다.

  • FindFragmentById – 이 메서드는 조각이 트랜잭션의 일부로 추가되었을 때 레이아웃 파일에 지정된 ID 또는 컨테이너 ID를 사용하여 조각을 찾습니다.

  • FindFragmentByTag – 이 메서드는 레이아웃 파일에 제공되었거나 트랜잭션에 추가된 태그가 있는 조각을 찾는 데 사용됩니다.

조각과 작업은 모두 FragmentManager를 참조하므로 동일한 기술을 사용하여 서로 통신하는 데 사용됩니다. 애플리케이션은 이러한 두 메서드 중 하나를 사용하여 참조 조각을 찾고, 적절한 형식에 대해 해당 참조를 캐스팅한 다음, 조각에서 직접 메서드를 호출할 수 있습니다. 다음 코드 조각은 예제를 제공합니다.

또한 작업에서 FragmentManager를 사용하여 조각을 찾을 수 있습니다.

var emailList = FragmentManager.FindFragmentById<EmailListFragment>(Resource.Id.email_list_fragment);
emailList.SomeCustomMethod(parameter1, parameter2);

작업과 통신

조각이 Fragment.Activity 속성을 사용하여 해당 호스트를 참조할 수 있습니다. 작업을 보다 구체적인 형식으로 캐스팅하면 다음 예제와 같이 작업에서 해당 호스트의 메서드와 속성을 호출할 수 있습니다.

var myActivity = (MyActivity) this.Activity;
myActivity.SomeCustomMethod();