Fragment와 FragmentActivity의 차이점은 무엇입니까?


답변:


280

A Fragment는의 섹션으로 다음과 Activity같습니다.

  • 자체 수명주기
  • 자체 입력 이벤트를 수신
  • Activity실행 하는 동안 추가하거나 제거 할 수 있습니다 .

A는 Fragment항상에 포함되어야합니다 Activity.

FragmentsHoneyComb (3.0) 이전의 API의 일부가 아닙니다. FragmentsHoneyComb 이전의 플랫폼 버전을 대상으로하는 앱에서 사용 하려면 지원 패키지 를 프로젝트 에 추가하고를 사용하여을 FragmentActivity보유해야합니다 Fragments. FragmentActivity클래스 처리를위한 API를 가지고 Fragments반면, Activity클래스, 벌집 이전에,하지 않습니다.

프로젝트가 HoneyComb 이상을 대상으로하는 경우을 (를) 사용 Activity하지 않아야 FragmentActivity합니다 Fragments.

일부 세부 사항 :

android.app.Fragment와 함께 사용하십시오 Activity. android.support.v4.app.Fragment와 함께 사용하십시오 FragmentActivity. 지원 패키지 Fragment를 추가하지 마십시오 Activity. 예외가 발생합니다.

물건은 조심하려면 다음 FragmentManagerLoaderManagerFragmentActivity에 대한 별도의 지원 버전이 있습니다 :

(HoneyComb 이상) Fragment에서를 사용하는 경우Activity

  • getFragmentManager() 얻을 android.app.FragmentManager
  • getLoaderManager() 얻을 android.app.LoaderManager

pre-HoneyComb Fragment에서를 사용하는 경우 다음으로 FragmentActivity전화하십시오.

  • getSupportFragmentManager()얻을 android.support.v4.app.FragmentManager.
  • getSupportLoaderManager() 얻을 android.support.v4.app.LoaderManager

그렇게 하지 않는다

//don't do this
myFragmentActivity.getLoaderManager(); 
//instead do this:
myFragmentActivity.getSupportLoaderManager();

또는

//don't do this:
android.app.FragmentManager fm = myFragmentActivity.getSupportFragmentManager();
//instead do this:
android.support.v4.app.FragmentManager fm = myFragmentActivity.getSupportFragmentManager()

조각을 포함 Activity해야하지만 Activity레이아웃의 일부일 필요는 없습니다 . 자체 UI가없는 활동의 보이지 않는 작업자로 사용할 수 있습니다.


6
그러나 조각은 활동 레이아웃의 일부일 필요는 없습니다. 활동에 대한 보이지 않는 작업자로 고유 한 UI가없는 조각을 사용할 수도 있습니다.
uzay95

1
이것을 지적 해 주셔서 감사합니다. 마지막에 섹션을 추가하여 언급했습니다.
Gunnar Karlsson

@GunnarKarlsson fragmentActivity에 프래그먼트를 추가할까요?
Dhasneem

2
@Dhasneem 앱이 3.0 미만의 Android 버전에서 작동하게하려면 FragmentActivity에 Fragment를 추가합니다. 그렇지 않으면 활동에 프래그먼트를 추가합니다.
Gunnar Karlsson

2
감사! 이것은 내 문제를 해결합니다! 이제 Facebook 로그인 버튼을 추가 한 후 onCreate에서 내 앱 (활동으로 작성된)이 항상 충돌하는 이유를 알고 있습니다 (예제에서 android.support.v4.app.Fragment 사용). 물론 충돌의 다른 이유도 있습니다. 그러나 당신의 대답은 그것들을 하나로 묶는 마지막 조각입니다.
Chlind

14

FragmentActivity는 프래그먼트를 지원하는 클래식 액티비티입니다. 따라서 FragmentActivity는 Fragment가 Activity에 첨부 될 때 필요합니다.

Well Fragment는 Activity의 기본 동작을 복사하는 좋은 구성 요소이며 여전히 Activity와 같은 독립형 응용 프로그램 구성 요소는 아니며 작동하려면 Activity에 연결해야합니다.

여기에 자세한 내용은


1
BTW, 오래된 답변. API 11 이전의 기기에서 작동하려는 앱에만 적용됩니다.
ToolmakerSteve

@ToolmakerSteve 자세한 내용을 제공 할 수 있습니까? 가능하면 최신 버전으로 답변을 편집 할 수 있습니까?
Gökhan Barış Aker

8

FragmentActivity를 Fragments를 지원할 수있는 일반 Activity 클래스로 생각하십시오. 벌집 이전에는 활동 클래스가 단편을 직접 지원할 수 없었으므로 단편을 사용하는 활동에 필요합니다.

대상 배포가 Honeycomb 이상이면 활동을 대신 확장 할 수 있습니다.

또한 프래그먼트는 '서브 액티비티'로 간주됩니다. 활동이 없으면 존재할 수 없습니다. 항상 조각을 하위 활동으로 생각하면 좋을 것입니다. 따라서 활동은 부모이고 조각은 자식과 같은 상징적 관계입니다.


1

FragmentActivity는 Fragment를 포함하는 임시 활동입니다. 이 몇 마디로 안드로이드 3.0 (HoneyComb)을 통해 안드로이드 팀이 안드로이드 SDK에 삽입 한 주요 중요한 변경 중 하나를 설명했습니다.

이러한 새로운 개념으로 코드와 레이아웃이보다 유연하고 유지 관리 가능해집니다. Google에서 검색하면 많은 예가 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.