如何在Android中应用语言更改后刷新片段?

9
我的应用程序广泛使用片段。它应该支持3种语言 - 英语、阿拉伯语和库尔德语。主屏幕由一个导航抽屉组成,其中包含一个选项菜单,其中之一是语言,它打开一个语言选择对话框。语言选择器有3个按钮 - 英语、库尔德语和阿拉伯语。点击按钮会更改语言,如下所示 -
private void setLocale(String code){
        Configuration config=new Configuration();
        Locale locale = null;
        locale=new Locale(code);
        Locale.setDefault(locale);
        config.locale=locale;
        context.getResources().updateConfiguration(config,
                  context.getResources().getDisplayMetrics());
        dismiss();

    }

我已将以下代码添加到onConfigurationChange中 -
FragmentManager fragmentManager = getSupportFragmentManager();
        int count=fragmentManager.getBackStackEntryCount();

        BackStackEntry latestEntry=(BackStackEntry) fragmentManager.getBackStackEntryAt(count-1);
        String str=latestEntry.getName();
        Fragment fragment=fragmentManager.findFragmentByTag(str);
        if(fragment==null){
            return;
        }
        FragmentTransaction fragTransaction = fragmentManager.beginTransaction();
        fragTransaction.detach(fragment);
        fragTransaction.attach(fragment);
        fragTransaction.commit();

我已经将以下内容添加到了Android清单文件中 -

android:configChanges="locale"

但是似乎没有任何进展。我还尝试了刷新Fragment的视图,但运气不太好。非常感谢您的帮助。


请看这个答案的第二个建议:https://dev59.com/B2cs5IYBdhLWcg3wmlWk#12771054 - Javi Mollá
1个回答

0

我认为,如果你监听配置更改,你应该重写onConfigurationChanged方法,无论是在Fragment中还是在承载活动中,然后根据需要使用新的Locale更新UI,而不是分离和重新附加。你只需将一个方法传递给活动的子项,并根据需要重新填充所有字段即可。


请参考这个答案 - thepoosh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接