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();但是我得到了同样的错误