2013-12-08 6 views
2

저는 최근까지 minSdkVersion="14"까지 앱을 제작 해 왔지만이를 변경하고 API 10에 대한 호환성을 추가하고 싶습니다. 첫 번째 문제는 스타일과 관련되었지만 그것을 사용하여 Theme.AppCompat. 이제 코드에 문제가 있습니다. 첫 번째는 많은 조각을 사용하고 있다는 것입니다. 내 응용 프로그램에 표시API 10의 단편에 대한 지원 추가

첫 번째 조각은 다음과 같습니다 이것은 단지 내부 클래스가 DialogFragment를 확장 내 활동 내에서

FirstRunNotice firstRunNotice = new FirstRunNotice(); 
firstRunNotice.show(getFragmentManager(), "WhatDoesThisStringEvenDo?"); 
//.show method gives an error 

입니다. API 10에서 어떻게 작동합니까? 만약 내가 그것을 android.support.v4.app.DialogFragment로 변경하면 멀리 (Android Studio를 사용하여) 오류가 걸릴 것 같지만 그것은 하나의 내부 클래스에 (나는 DialogFragments 가지고) 그것을 사용하면 둘 다에 오류가 걸리기 때문에 이상해. 왜 그런가요?

또한 Fragment 확장 클래스를 android.support.v4.app.Fragment, .DialogFragment, .ListFragment으로 변경하는 경우 ... 더 높은 API에서 내 앱을 실행하는 경우 어떻게해야합니까? 앱이 호환성 라이브러리를 사용합니까, 아니면 해당 API의 클래스를 사용하는지 알고 있습니까? 차이점이 있습니까?

답변

3

이제 Gingerbread 이하를 지원하려는 경우 이 있습니다. android.support.v4.app.* 앱의 Fragment 클래스를 사용하여 컴파일하고 실행하십시오. 이 getFragmentManager()에 대한 호출도 또한 getSupportFragmentManager()를 호출하면 FragmentActivityActionBarActivity의 일부라는 것을주의하는 것이 중요하다 getSupportFragmentManager()

로 교체해야합니다 (후자의 것은 이전의 확장자입니다. 그것은 구글의 ActionBarCompat 라이브러리의 일부입니다) .

왜냐하면 지원 프래그먼트가 Android 시스템에 추가 되었기 때문에 Android 내부에 너무 많이 의존하지 않고 (Gingerbread 이하에는 Fragment의 개념이 없기 때문에) 구현할 수있는 방법이 필요하기 때문입니다.

하지만 하나의 내부 클래스 (나는 DialogFragments를 사용함)를 사용하면 오류가 발생하기 때문에 이상합니다. 왜 그런가요?

그것은 여러 안드로이드 린트 오류 즉 경우에 어떻게 할 것인지

내가 더 높은 API

아무것도 내 응용 프로그램을 실행을 발생한 가능성, 지원 라이브러리는 새로운 API와 함께 작동 버전도 있습니다. 물론 이전 코드가 일 때 API 11+가 필요한 경우 해당 코드를 백 포트하는 방법을 찾아야합니다.

응용 프로그램에서 호환성 라이브러리를 사용합니까, 아니면 해당 API의 클래스를 사용하겠습니까?

지원 Fragmentdocumentation는 말한다 :

안드로이드 3.0 이상에서 실행,이 구현은 여전히 ​​ 사용된다 프레임 워크의 구현으로 전환하려고 시도하지 않습니다.

지원 조각이 항상 사용됩니다. 보통 이것은 문제가되지 않습니다.

+0

설명해 주셔서 감사합니다. 만약 내가'getSupportFragmentManager()'메소드로 변경하면, getFragmentManager()가 작동하지 않는다. – Squeazer

+0

@Squeazer 이제'FragmentActivity' 또는'ActionBarActivity'를 확장 중입니까? 나는 당신이'Theme.AppCompat'을 사용하고 있기 때문에 그렇게 생각했습니다. –

+0

첫 번째 활동은 '활동'을 확장합니다. 기본적으로 웹에서 일부 XML 파일을로드하는 응용 프로그램의 시작 화면입니다. 'gerFragmentManager()'는'onCreate()'와 내부 AsyncTask 클래스에서 호출됩니다. – Squeazer