내 Android 용 응용 프로그램에 언어 설정이 있습니다. 현재 언어를 SharedPreferences에 저장하고 올바른 언어로 표시 될 수 있도록 스택의 모든 활동을 다시 시작하는 onSharedPreferencesChanged를 사용합니다.대화 상자를 표시하고 활동을 다시 시작하면 LeakedWindow 오류가 발생합니다.
이것은 매력처럼 작동하지만 언어 설정이 대화 상자에 표시되므로 변경하려는 언어를 클릭하면 공유 환경 설정이 변경된 다음 누출 된 창 오류가 발생합니다.
public void showDialog(View v) {
final CharSequence[] items = { res.getString(R.string.english),
res.getString(R.string.spanish) };
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(res.getString(R.string.change_language));
builder.setSingleChoiceItems(items, selected,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int item) {
switch (item) {
case 0: // English
if (selected == 0) {
Toast.makeText(
SettingsActivity.this,
res.getString(R.string.current_language),
Toast.LENGTH_LONG).show();
break;
}
changeLocale("en");
break;
case 1: // Spanish
if (selected == 1) {
Toast.makeText(
SettingsActivity.this,
res.getString(R.string.current_language),
Toast.LENGTH_LONG).show();
break;
}
changeLocale("es");
break;
}
alert.dismiss();
}
});
alert = builder.create();
builder.show();
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
if (key.equals("language")) {
restartActivity();
}
}
이 방법은 내 모든 활동의 부모 활동에 있습니다
public void restartActivity() {
Intent intent = getIntent();
finish();
startActivity(intent);
}
임 라인 builder.show (에서 유출 된 윈도우를) 받고 난 모든 활동를 다시 시작하고 있습니다 때문에 공유 환경 설정이 변경됩니다. 이 오류 메시지없이 대화 상자를 표시하고 활동을 다시 시작하려면 어떻게합니까?
미리 감사드립니다.
'AlertDialog.Builder'가 생성자에서'this'를 참조하기 때문에 누출 된 창을 얻게됩니다. 모든 코드를 게시 할 수 있습니까? 다시 시작했을 때 무엇을하고 있는지 잘 모르겠습니다. –
새 편집 확인 –
이전에 작성한 AlertDialog를 닫기 전에 작업을 완료 한 것 같습니다. 아래 대답을 참조하십시오. –