底部导航未根据默认语言更新

Bottom Navigation is not updated according the default language

实际上我正在创建一个多语言(英语、印地语和旁遮普语)android应用程序所以我在共享偏好中保存了用户语言偏好并签入onCreate() 在每个 activity 中更新字符串。但问题是当我选择印地语时,整个 activity 字符串正确更改为印地语,但底部导航仅设置为英语,当我选择旁遮普语而不是整个 activity 字符串转换完美但底部导航循环设置为印地语等,请查看下方测试用例

                 user Selected Language                 |            Bottom Navigation Language
                                                        |   
First time:         English                             |               English
Second time:        Hindi                               |               English
Third time:         Punjabi                             |               Hindi
Fourth time:        English                             |               Punjabi
Fifth time          Hindi                               |               English

 and so on...

代码:

    public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        sessionManager = new SessionManager(getApplicationContext());
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        userDefaultLanguage(sessionManager.getUserLanguage());
        initViews();
    }
    Locale myLocale;
    String currentLanguage = "en";
    private void userDefaultLanguage(String localeName) {
            myLocale = new Locale(localeName);
            Resources res = getResources();
            DisplayMetrics dm = res.getDisplayMetrics();
            Configuration conf = res.getConfiguration();
            conf.locale = myLocale;
            res.updateConfiguration(conf, dm);
       }

    private void initViews() {
        setSupportActionBar(mToolBar);
        getSupportActionBar().setDisplayShowTitleEnabled(false);
        loadFragment(MainFragment.newInstance());
        navigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.navigation_home:
                        toolbar_title.setText(R.string.home);
                        if (CheckInternet.isNetwork(getApplicationContext())) {
                            loadFragment(MainFragment.newInstance());
                        } else
                            connectToInternetToast();
                        return true;

                    case R.id.navigation_music:
                        if (CheckInternet.isNetwork(getApplicationContext())) {
                            toolbar_title.setText(R.string.music);
                            //   toolbar_title.setTypeface(applyFonts());
                            loadFragment(MainFragment2.newInstance());
                        } else
                            connectToInternetToast();
                        return true;

                    case R.id.navigation_gyaan:
                        if (CheckInternet.isNetwork(getApplicationContext())) {
                            toolbar_title.setText(R.string.gallery);
                            loadFragment(MainFragment3.newInstance());
                        } else
                            connectToInternetToast();
                        return true;

                    case R.id.navigation_settings:
                        if (CheckInternet.isNetwork(getApplicationContext())) {
                            Intent intent2 = new Intent(getApplicationContext(), AppInformationActivity.class);
                            startActivity(intent2);
                        } else
                            connectToInternetToast();
                        return true;
                }
                return false;
            }
        });
        toolbar_title.setText(R.string.home);
        if (CheckInternet.isNetwork(getApplicationContext())) {
            if (SystemClock.elapsedRealtime() - mLastClickTime < 1000) {
                return;
            }
            mLastClickTime = SystemClock.elapsedRealtime();
        } else
            connectToInternetToast();

    }


    private void connectToInternetToast() {
        Toast.makeText(getApplicationContext(), "Connect to internet", Toast.LENGTH_LONG).show();
    }

    private void loadFragment(Fragment selectedFragment) {
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.replace(R.id.frame_layout, selectedFragment);
        transaction.commit();
    }

}

我已经找到解决方案,请查看以下代码:

public static void userDefaultLanguage(Activity context,String localeName) {
        Locale locale;
        //Log.e("Lan",session.getLanguage());
        locale = new Locale(localeName);
        Configuration config = new 
        Configuration(context.getResources().getConfiguration());
        Locale.setDefault(locale);
        config.setLocale(locale);
        context.getBaseContext().getResources().updateConfiguration(config,
                context.getBaseContext().getResources().getDisplayMetrics());
    } 

并将此方法称为

setLocale(MainActivity.this,sessionManager.getUserLanguage());