Android 可以在片段中手动调用onCreateView吗?

Android 可以在片段中手动调用onCreateView吗?,android,fragment,android-view,fragment-tab-host,Android,Fragment,Android View,Fragment Tab Host,是否可以在片段中手动调用方法onCreateView,或者,如果不可以,是否有某种方法可以模拟此调用 我与tabHost有一个FragmentActivity。每个选项卡都包含一个片段,我想在按下“刷新”按钮时刷新片段的视图。更具体地说,我想重新调用onCreateView方法 我的代码当前看起来像: @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstan

是否可以在
片段中手动调用方法
onCreateView
,或者,如果不可以,是否有某种方法可以模拟此调用

我与tabHost有一个
FragmentActivity
。每个选项卡都包含一个
片段
,我想在按下“刷新”按钮时刷新
片段的视图。更具体地说,我想重新调用
onCreateView
方法

我的代码当前看起来像:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
// Inflate the layout for this fragment
    view= inflater.inflate(R.layout.fragment_hall, container, false);

    layoutExsternal = (RelativeLayout) view.findViewById(R.id.layoutExsternal);
    layoutHall = (RelativeLayout) view.findViewById(R.id.layoutHall);

    init();

    return view;
 }

  [...]

@Override
public boolean onOptionsItemSelected(MenuItem item) {
      // TODO Auto-generated method stub
     Log.d("itemSelected1", this.getClass().getSimpleName());

     switch (item.getItemId()) {
        case R.id.menu_refresh:

            //HERE I want to insert a method for refresh o redraw

     return true;
     }

return super.onOptionsItemSelected(item);

}

您可以让您的替换按钮用片段的新实例替换当前布局

// onButtonClick
SomeFragment fragment = new SomeFragment();
getFragmentManager().beginTransaction().replace(R.id.current_layout, fragment).commit();

我已经解决了我的问题。我将当前片段替换为自身,但在保存当前片段的引用之前,我关闭了当前片段调用onDestroy()的生命周期。我用“newFragment”变量来回忆它


有时我发现FragmentTransaction的replace不适用于用自身替换片段,对我有效的方法是使用detach和attach:

getSupportFragmentManager()
    .beginTransaction()
    .detach(fragment)
    .attach(fragment)
    .commit();

有关删除和分离之间的区别,请参见。手动调用生命周期方法从来都不是正确的解决方案。您也不需要
newFragment
变量;您可以再次使用
这个
。正如@Karu所说,手动调用生命周期方法不是一个好方法。是否缺少一个
提交
?我在
onActivityResult
中使用了它(从布局影响选项可能已更改的设置中返回),因为“当您的活动重新启动时,您将在
onResume()
之前立即收到此调用。”。调用
commit
将导致“onSaveInstanceState之后无法执行此操作”。片段状态仍然保留!请使用.commitAllowingStateLoss()相反!更好的方法是重构onCreateView。首先找到布局视图并将它们分配给字段,然后调用一个填充它们的委托方法。然后让刷新操作调用委托。你的init()方法似乎已经有了这个。刷新不能只调用它吗?我觉得这个方法很有用
getSupportFragmentManager()
    .beginTransaction()
    .detach(fragment)
    .attach(fragment)
    .commit();