2017-02-09 4 views
0

AppCompatActivitygetFragmentManager()은 왜 조각 관리자의 지원 버전을 반환합니까? 대신 활동을 AppCompatActivity으로 설정하고 특히 getSupportFragmentManager()으로 전화해야합니다. 수십 가지 다른 방법에 대해서도 마찬가지입니다. 그것은 당신이 스스로 호출 할 수있는 메소드와 "지원"버전으로 다시 브랜드화해야하는 메소드를 마술처럼 알아야한다는 불만입니다. 더 낮은 버전의 Android를 계속 지원할 때 "지원"버전 대신 "일반"버전을 사용하려는 유스 케이스가 있습니까? AppCompatActivity이 최신 API 버전 Activity과 구별 될 수 없다면 나에게 더 많은 의미가 있습니다. 결국 그것이 지원되는 것입니다. 그렇지 않습니까? 최신 API 버전 Activity과 동일한 기능을 제공 하시겠습니까?AppCompativity Design

디자인 원칙이나 숨겨진 Java 제한으로 인해 그렇게 할 수 없습니까?

답변

1

AppCompatActivity의 getFragmentManager()가 왜 조각 관리자의 지원 버전을 반환하지 않습니까?

수 없으므로.

Activity은 API 레벨 11 이상에서 getFragmentManager()android.app.FragmentManager으로 반환합니다. AppCompatActivity이 재정의 할 수있는 유일한 방법은 재정의 된 메서드 android.app.FragmentManager을 반환하는 경우입니다. 그건 불가능하다. AppCompatActivity은 반환 할 API가 android.app.FragmentManager 인 API 레벨 7로 돌아가도록 설계되었습니다. 따라서 우리는 getSupportFragmentManager()을 가지고 android.support.v4.app.FragmentManager을 반환합니다.

AppCompactActivity은 실제적으로 API 레벨 11 이전의 API 레벨 4와 기본 조각이 구현 된 API 레벨 4로 다시 돌아 가기 위해 설계된 FragmentActivity에서 조각을 가져옵니다.

+0

왜, 예를 들어, 지원 라이브러리가 자신의 버전을 'android.app.FragmentManager'로 정의하게할까요? (필자는 "지원 버전이 나중의 API에서 기본 버전과 충돌"또는 "보안상의 이유"중 하나의 이유를 예측합니다. 그러나 확실하지 않습니다.) – Erhannis

+0

@Erhannis : "지원 라이브러리가있는 이유는 무엇입니까? android.app.FragmentManager의 자체 버전을 정의 하시겠습니까? " - 라이브러리를 사용하는 앱이 API 레벨 11 이상에서 충돌하고 'android.app.FragmentManager'의 구현이 충돌하기 때문입니다. – CommonsWare

+0

흠. ClassLoaders 및 리플렉션을 사용하여 주위에 까다로운 방법이 없다면 놀랄 것입니다.하지만 그만 두겠습니다. 나에게 발생하는 다른 해결책은 AppCompatActivity 및 Activity11 또는 둘 다 자체의 FragmentManager 버전과 함께 getFragmentManager()를 구현하는 것 모두에 대해 메소드를 추가하는 대신 Activity를 서브 클래 싱하는 것입니다. 나는 그런 접근법을 좋아한다고 말할 수는 없다. 귀찮아. 좋아, 나는 양보한다. 감사. 나는 여전히 모든 "지원"방법을 좋아하지 않는다. 그것도 너무 편치 않습니다. – Erhannis