대화 상자 창을 열려고하는데 열 때 마다이 예외가 발생합니다.
Uncaught handler: thread main exiting due to uncaught exception
android.view.WindowManager$BadTokenException:
Unable to add window -- token null is not for an application
at android.view.ViewRoot.setView(ViewRoot.java:460)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
at android.app.Dialog.show(Dialog.java:238)
at android.app.Activity.showDialog(Activity.java:2413)
showDialog
디스플레이의 ID 로 호출 하여 만들고 있습니다 . onCreateDialog
핸들러는 벌금을 기록하고 나는 문제없이 단계별로 할 수 있지만, 내가 뭔가를 누락 것처럼 보이기 때문에 나는 그것을 첨부했습니다 :
@Override
public Dialog onCreateDialog(int id)
{
Dialog dialog;
Context appContext = this.getApplicationContext();
switch(id)
{
case RENAME_DIALOG_ID:
Log.i("Edit", "Creating rename dialog...");
dialog = new Dialog(appContext);
dialog.setContentView(R.layout.rename);
dialog.setTitle("Rename " + noteName);
break;
default:
dialog = null;
break;
}
return dialog;
}
이것에서 빠진 것이 있습니까? 에서 대화 상자를 만들 때이 문제가 발생하는 것에 대해 몇 가지 질문에 대해 이야기 onCreate
했습니다. 활동이 아직 생성되지 않았기 때문에 발생하지만 메뉴 객체에서 호출 한 appContext
것이므로 변수가 디버거에 올바르게 채워진 것처럼 보입니다.
답변
대신 :
Context appContext = this.getApplicationContext();
현재 활동에 대한 포인터를 사용해야합니다 (아마도 this
).
오늘도 이것에 물 렸습니다. 성가신 부분은 getApplicationContext()
developer.android.com의 축약어입니다.
답변
활동이 아닌 컨텍스트를 통해 애플리케이션 창 / 대화 상자를 표시 할 수 없습니다. 유효한 활동 참조를 전달하십시오
답변
getApplicationContext에 대한 내용입니다.
안드로이드 사이트의 문서가 그것을 사용한다고 말했지만 작동하지 않습니다 … grrrrr 😛
그냥 해:
dialog = new Dialog(this);
“this” 는 일반적으로 대화를 시작하는 활동입니다.
답변
안드로이드 문서는 getApplicationContext ();
AlertDialog.Builder 또는 AlertDialog 또는 Dialog를 인스턴스화하는 동안 현재 활동을 사용하는 대신 작동하지 않습니다 …
전의:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
또는
AlertDialog.Builder builder = new AlertDialog.Builder((Your Activity).this);
답변
대신에 getApplicationContext()
, 단지 사용ActivityName.this
답변
비슷한 클래스가 있는데 다른 클래스가 있습니다.
public class Something {
MyActivity myActivity;
public Something(MyActivity myActivity) {
this.myActivity=myActivity;
}
public void someMethod() {
.
.
AlertDialog.Builder builder = new AlertDialog.Builder(myActivity);
.
AlertDialog alert = builder.create();
alert.show();
}
}
대부분 잘 작동했지만 때로는 같은 오류로 충돌했습니다. 그런 다음에 나는 MyActivity
…
public class MyActivity extends Activity {
public static Something something;
public void someMethod() {
if (something==null) {
something=new Something(this);
}
}
}
객체를로 유지했기 때문에 static
코드의 두 번째 실행은 여전히 원래 버전의 객체를 유지하고 있었으므로 여전히 원본을 참조했습니다.Activity
더 이상 존재하지 않는 있었습니다.
어리석은 어리석은 실수, 특히 내가 static
처음부터 물건을 들고있을 필요가 없었기 때문에 …
답변
그냥 바꿔
AlertDialog.Builder alert_Categoryitem =
new AlertDialog.Builder(YourActivity.this);
대신에
AlertDialog.Builder alert_Categoryitem =
new AlertDialog.Builder(getApplicationContext());