2016-12-22 17 views
0

AlertDialog.Builder 매개 변수 VS getApplicationContext()에서 내 Activity 컨텍스트를 사용해야하는 이유를 설명해 주실 수 있습니까? 특히, 내가 왜이 오류가 점점 오전 :AlertDialog - Activity vs Application Context

java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity. 

나는 둘 사이의 차이점을 이해를하지만 Theme.AppCompat

을 사용한다고 언급하는 이유를 구체적으로 나는 그것이 AppCompatActivity과 테마 함께 할 수있는 뭔가가 알고 궁금 더 이상 호환되지는 않지만 왜 그 이유에 대한 확실한 설명을 찾을 수 없습니까?

내 응용 프로그램의 주제는 스타일 XML 파일에서이 설정되어

:

<style name="AppTheme" parent="Theme.AppCompat"> 
    <!-- Customize your theme here. --> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorAccent</item> 
</style> 

당신에게 감사

+0

나는이 대답했습니다 생각 : http://stackoverflow.com/questions/9122627/should-i-use-getapplicationcontext-or-activity-this-in-a-long-running-asynctask – Paul

+2

AlertDialog.Builder (컨텍스트 컨텍스트)가 Activity를 매개 변수로만 받아들이는 이유는 무엇입니까?] (http://stackoverflow.com/questions/5436822/why-does-alertdialog-buildercontext-context-only-accepts-activity) -as-a-paramet) – mlidal

+0

다른 질문에 대한 대답은 찾고있는 가능한 대답입니다. http://stackoverflow.com/a/10347346/2730218 – skarfa

답변

1

상황의 두 가지 유형이 있습니다 :

응용 프로그램 컨텍스트는 응용 프로그램과 연결되어 응용 프로그램의 수명 내내 항상 동일하게 유지되며 변경되지 않습니다. 토스트를 사용하는 경우 응용 프로그램 컨텍스트 또는 활동 컨텍스트 (둘 다)를 사용할 수 있습니다. 토스트는 응용 프로그램의 어느 위치에서나 표시 할 수 있고 특정 창에 연결되지 않기 때문입니다. 그러나 많은 예외가 있습니다. 한 가지 예외는 액티비티 컨텍스트를 사용하거나 전달해야 할 때입니다.

액티비티 컨텍스트는 액티비티와 연관되어 있으며, 액티비티가 파괴되면 파괴 될 수 있습니다. 하나의 애플리케이션에 여러 액티비티가있을 수 있습니다. 그리고 때로는 활동 컨텍스트 핸들이 절대적으로 필요합니다. 예를 들어, 새 활동을 실행해야하는 경우 Intent에서 활동 컨텍스트를 사용하여 새 실행 활동이 활동 스택과 관련하여 현재 활동에 연결되도록해야합니다. 그러나 응용 프로그램의 컨텍스트를 사용하여 새 작업을 시작할 수도 있지만 Intent.FLAG_ACTIVITY_NEW_TASK 플래그를 인 텐트로 설정하여 새 작업으로 처리해야합니다.

For more details

+0

약간의 질문을 편집했습니다. 왜이 오류가 발생하는지 궁금합니다. java.lang.IllegalStateException :이 액티비티와 함께 ​​Theme.AppCompat 테마 (또는 하위 클래스)를 사용해야합니다. 내가 사용하는 테마? –

+0

@MarkF 당신은 당신의 활동을 위해 무엇을 exteneded? – Sridhar

+0

AppCompatActivity –