Android 选择MenuItem时重新创建实际片段

Android 选择MenuItem时重新创建实际片段,android,android-fragments,android-activity,navigation-drawer,Android,Android Fragments,Android Activity,Navigation Drawer,我想在单击抽屉导航活动中的选项项时重新创建(重新加载)片段 @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); switch (id) { case R.id.fr: LocaleHelper.setLocale(getBaseContext(), "Fr");

我想在单击抽屉导航活动中的选项项时重新创建(重新加载)片段

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();

        switch (id) {
            case R.id.fr:
                LocaleHelper.setLocale(getBaseContext(), "Fr");
                if(getVisibleFragment().isAdded()){
                    getVisibleFragment().getActivity().recreate();
                }
                return true;
            case R.id.ar:
                LocaleHelper.setLocale(getBaseContext(), "Ar");
                if(getVisibleFragment().isAdded()){
                    getVisibleFragment().getActivity().recreate();
                }
                return true;
            case R.id.en:
                LocaleHelper.setLocale(getBaseContext(), "En");
                if(getVisibleFragment().isAdded()){
                    getVisibleFragment().getActivity().recreate();
                }
                return true;
            case R.id.es:
                LocaleHelper.setLocale(getBaseContext(), "Es");
                if(getVisibleFragment().isAdded()){
                    getVisibleFragment().getActivity().recreate();
                }
                return true;
        }

    return super.onOptionsItemSelected(item);
}
当我单击某个选项时,会出现以下错误:

java.lang.IllegalStateException:片段NewsMainFragment{9a39a2f}未附加到上下文

如何才能正确地实现这一点?

在此代码中:

getVisibleFragment().getActivity().recreate();
您可以重新创建整个
活动
,而不是
片段
。因此,如果要重新创建的
片段
位于方法
onoptionItemSelected(MenuItem项)
所在的
活动中,则只需重新创建当前活动,这样您就可以调用:

recreate();
而不是你的代码

但是,如果您只想重新创建
片段
,而不想重新创建整个
活动
,您可以将初始化
片段
的所有视图的代码放在单独的公共方法中并调用它们,如:

@Override
    public void onResume() {
        super.onResume();
        updateUi();
    }

    public void updateUi() {
        // Your code
    }
然后:

case R.id.fr:
                LocaleHelper.setLocale(getBaseContext(), "Fr");
                if(getVisibleFragment().isAdded()){
                    ((YourFragment)getVisibleFragment()).updateUi();
                }
                return true;

据我所知,你不能重建碎片或活动!,您可以通过newInstrance()方法访问片段<代码>getSupportFragmentManager().beginTransaction().replace(R.id.container,YourFragment.newInstance()).commit()我试图使用recreate();但是我得到了同样的错误