在我的应用程序中,我有一个设置片段,这个片段实现了一个onPreferenceChangeListerner
接口和lister只用于特定的首选项(是一个ListPreference)。在设置片段时,我可以更改应用程序的语言,现在我想向用户显示一个对话框,以便在他们更改语言时注意到它们,应用程序将重新启动。用户可以选择确认或取消。
public boolean onPreferenceChange(Preference preference, Object newValue) {
if(preference.getKey().equals("pref_language")){
showLanguageChangeDialog();
}
return true;
private void showLanguageChangeDialog(final String newValue){
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(getString(R.string.string_language_change_dialog_title))
.setMessage(getString(R.string.string_language_change_dialog_message))
.setPositiveButton(R.string.string_dialog_confirm, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Resources resources = SettingsFragment.this.getResources();
DisplayMetrics dm = resources.getDisplayMetrics();
Configuration config = resources.getConfiguration();
switch (newValue){
case "English":
config.locale = Locale.ENGLISH;
break;
case "German":
config.locale = Locale.GERMAN;
break;
case "Chinese":
config.locale = Locale.SIMPLIFIED_CHINESE;
break;
default:
break;
}
resources.updateConfiguration(config, dm);
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
SettingsFragment.this.restartApp();
return null;
}
}.execute();
}
})
.setNegativeButton(R.string.string_dialog_cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.create().show();
}
private void restartApp() {
Intent i = getActivity().getPackageManager().getLaunchIntentForPackage(getActivity().getPackageName());
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
getActivity().finish();
}
点击&#34;确认&#34;在重新启动应用程序的对话框中运行良好,但现在我遇到了一些问题:
如果用户单击&#34;取消&#34;,则不应更改语言首选项,但实际上已更改。我该如何解决?我所知道的是,如果方法onPreferenceChange
返回true,则首选项将被更新,如果为false,则不更新。但是如何返回false取决于用户的操作。
主线程不会等待Alertdialog的结果。我如何等待alertdialog的结果,以便我可以决定继续该步骤。
感谢您的帮助!!!