[안드로이드] You need to use a Theme.AppCompat theme (or descendant) with this activity

프로그래밍/Android 관련2017. 12. 12. 17:27
안녕하세요. 드리머즈입니다.

kakao sdk sample을 이용해서 테스트 중에 아래와 같은 에러가 발생했습니다.
java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.



에러가 발생한 위치는 LoginActivity의 아래 코드에서

마지막 즈음의 alert.show(); 부분이었습니다.

runOnUiThread(new Runnable() {
@Override
public void run() {
hidepDialog();

AlertDialog.Builder alertDialog = new AlertDialog.Builder(LoginActivity.this);
alertDialog.setTitle("알림")
.setMessage(server_status_mag)
.setCancelable(false)
.setPositiveButton("확인",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {

}
});

AlertDialog alert = alertDialog.create();
alert.show();
}
});

왜 뜬금없이 AlertDialog에서 AppCompat관련해서 에러가 발생했는지 몰랐습니다.
더군다나 LoginActivity는 AppCompat이 아닌 그냥 Activity를 상속받고 있습니다.

범인은.. LoginActivity의 import문에 있었습니다.
import android.support.v7.app.AlertDialog;


AlertDialog를 import할 때를 떠올려보면..

import 가능한 클래스가 2개 있었는데.. 무심코 appcompat과 관련이 있는

android.support.v7.app.AlertDialog를 import했던 것이 이런 에러를 발생시킨 것이었습니다.

appcompat과 관련이 있는 AlertDialog를 사용하기 위해서는 AppCompat Theme를 사용해야 합니다.


상황에 따라서 사용 가능한 해결 책은 여러 개 있습니다.

먼저 저의 경우에는 appcompat과 관련없는 AlertDialog를 import해주면 됩니다.
import android.app.AlertDialog;

다른 방법으로는 AndroidManifest.xml에서

문제가 발생한 Activity를 아래와 같이 바뀌면 에러가 발생하지 않습니다.

<activity
android:name=".LoginActivity"
android:theme="@style/Theme.AppCompat"
>
</activity>


작성자

Posted by 드리머즈

관련 글

댓글 영역