Android在应用程序中切换语言而无需重新启动

Android在应用程序中切换语言而无需重新启动,android,refresh,dialogfragment,Android,Refresh,Dialogfragment,在片段(设置)中,按名为DialogFragment的TextView,在其中更改设置(语言)应用程序,如何在DialogFragment附近关闭,在不重新启动整个应用程序的情况下应用设置 理想情况下,可以在SingleChoiceselection对话框中立即更改语言。重新启动后一切正常。下面是代码对话框片段: public class LanguageDialogFragment extends DialogFragment { final String[] itemsLang =

在片段(设置)中,按名为
DialogFragment
TextView
,在其中更改设置(语言)应用程序,如何在
DialogFragment
附近关闭,在不重新启动整个应用程序的情况下应用设置

理想情况下,可以在
SingleChoice
selection对话框中立即更改语言。重新启动后一切正常。下面是代码
对话框片段

public class LanguageDialogFragment extends DialogFragment {

    final String[] itemsLang = {"English", "Russian", "Ukraine"};
    final String[] items = {"en", "ru", "uk"};
    String lang;
    MainActivity activity = new MainActivity();

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle("Выберите свой родной язык")
                .setSingleChoiceItems(itemsLang, -1, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int item) {
                        lang = items[item];

                    }
                })

                .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        App.prefs.saveLanguage(lang);
                        App.changeLang(lang);

                        reload();

                    }
                })
                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {

                    }
                });

        return builder.create();
    }

    private void reload() {
        Intent intent = getActivity().getIntent();
        getActivity().finish();
        Intent LaunchIntent = getActivity().getPackageManager().getLaunchIntentForPackage(App.context.getPackageName());
        startActivity(LaunchIntent);
    }
}
下面是我想要实现的应用程序示例:

它的屏幕截图:


请尝试下面的代码。您必须根据用户选择的语言创建新的区域设置,将其设置为当前区域设置,然后重新启动活动。请注意,如果在执行区域设置切换时其他活动处于活动状态,则可能必须重新启动这些活动

public class LanguageDialogFragment extends DialogFragment {

    private final String[] itemsLang = {"English", "Russian", "Ukraine"};
    private final String[] items = {"en", "ru", "uk"};
    private String lang;

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle("Выберите свой родной язык")
            .setSingleChoiceItems(itemsLang, -1, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int item) {
                    lang = items[item];

                }
            }).setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    //When user submits, restart the activity in
                    //the new language
                    restartActivityInLanguage(lang);

                }
            }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    //Do nothing
                }
            });

        return builder.create();
    }

    private void restartActivityInLanguage(String language) {
        Locale locale = new Locale(language);
        Configuration config = new Configuration();
        config.locale = locale;
        Resources resources = getResources();
        resources.updateConfiguration(config, resources.getDisplayMetrics());
        getActivity().recreate();
    }
}

这不是一个完美的解决方案,应用程序类的静态变量和jni库将不会重新初始化。我不想重新启动我的应用程序,因为应用程序正在执行一些任务,如录制屏幕。所以,如果不重新启动应用程序,Android 7.0有什么解决方案吗?嘿,你找到答案了吗?我现在也有同样的问题。