Preference中的语言更改,显示对话框并重新启动应用程序

时间:2017-07-10 13:04:23

标签: android android-fragments dialog settings preference

在我的应用程序中,我有一个设置片段,这个片段实现了一个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;在重新启动应用程序的对话框中运行良好,但现在我遇到了一些问题:

  1. 如果用户单击&#34;取消&#34;,则不应更改语言首选项,但实际上已更改。我该如何解决?我所知道的是,如果方法onPreferenceChange返回true,则首选项将被更新,如果为false,则不更新。但是如何返回false取决于用户的操作。

  2. 主线程不会等待Alertdialog的结果。我如何等待alertdialog的结果,以便我可以决定继续该步骤。

  3. 感谢您的帮助!!!

0 个答案:

没有答案