Android Studio 刷新 activity 并显示当前片段

Android Studio refresh the activity and display the current fragment

我刚刚开始使用 android 工作室,如有任何错误,请多多包涵。我正在尝试使用微调菜单切换应用程序的语言。我已经找到了一些方法来做到这一点,但我试图简化它并看看我是否可以仅通过使用 onOptionsItemSelected 方法来实现。一切正常,应用程序中的语言发生变化,但前提是我在此 activity 中加载另一个片段。我一直在寻找如何刷新 activity 的解决方案,以便用户不必单击任何其他按钮即可看到语言已更改。我想出了一个解决方案来完成 activity 并打算再次启动它,但问题就在这里开始了。 activity 重新启动,但它显示了我在 onCreate 方法上分配的默认片段。我不知道如何让它加载用户当前看到的片段。如果我能让 activity 从 onResume 方法开始加载,而不是再次从 onCreate 加载,那就太好了,我认为它会显示当前片段。甚至可以这样做吗?有没有其他简单的方法让它用新语言显示当前片段?也许没有简单的方法,我应该重新开始?请帮我。这是我试过的:

     @Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
    Configuration configuration = new Configuration();
    Intent intent = new Intent();
    switch (item.getItemId()){
        case R.id.action_polski:
            Locale localePl = new Locale("pl");
            Locale.setDefault(localePl);
            configuration.locale = localePl;
            getBaseContext().getResources().updateConfiguration(configuration,getBaseContext().getResources().getDisplayMetrics());

            finish();
            startActivity(new Intent(this, MainActivity.class));
            overridePendingTransition(0, 0);

            break;
        case R.id.action_english:
            Locale localeEn = new Locale("en");
            Locale.setDefault(localeEn);
            configuration.locale = localeEn;
            getBaseContext().getResources().updateConfiguration(configuration,getBaseContext().getResources().getDisplayMetrics());

            finish();
            startActivity(new Intent(this, MainActivity.class));
            overridePendingTransition(0, 0);

            break;
    }
    return true;
}        

很遗憾,我不能只刷新片段。整个 activity 必须刷新,否则导航抽屉不会更改语言,它会保留以前的语言。

编辑:这是 onCreate 中的代码,我在这段代码的末尾添加了片段。但它是主片段,所以每当我用我的方法“刷新”activity 时,它都会加载相同的片段。

        @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    hideSystemUI();

    setContentView(R.layout.activity_main);
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    drawer = findViewById(R.id.drawer_layout);
    NavigationView navigationView = findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);

    navigationView.bringToFront();
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar,
            R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.addDrawerListener(toggle);
    toggle.syncState();


    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, new HomeFragment()).commit();
        navigationView.setCheckedItem(R.id.nav_home);
    }
}

您应该调用 recreate 而不是使用相同的 Activity 开始新的,并且在 onCreate 方法内部您必须在初始化默认片段

之前检查 savedInstanceState == null
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
    Configuration configuration = new Configuration();
    Intent intent = new Intent();
    switch (item.getItemId()){
        case R.id.action_polski:
            Locale localePl = new Locale("pl");
            Locale.setDefault(localePl);
            configuration.locale = localePl;
            getBaseContext().getResources().updateConfiguration(configuration,getBaseContext().getResources().getDisplayMetrics());

            recreate()
            break;
        case R.id.action_english:
            Locale localeEn = new Locale("en");
            Locale.setDefault(localeEn);
            configuration.locale = localeEn;
            getBaseContext().getResources().updateConfiguration(configuration,getBaseContext().getResources().getDisplayMetrics());

            recreate()
            break;
    }
    return true;
}   
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        if (savedInstanceState == null) {
            // init default fragment
        }
    }