是否可以在片段中手动调用onCreateView?

Sym*_*851 21 android fragment android-view fragment-tab-host

是否可以onCreateView在a中手动调用方法Fragment,如果没有,是否可以通过某种方式模拟此调用?

我有一个FragmentActivitytabHost.每个选项卡都包含一个Fragment,我想Fragment在按下"刷新"按钮时刷新视图.更具体地说,我想重新调用该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);

}
Run Code Online (Sandbox Code Playgroud)

Mat*_*igh 32

有时我发现FragmentTransaction的替换不适用于用自己替换片段,对我来说使用分离和附加的作用是什么:

getSupportFragmentManager()
    .beginTransaction()
    .detach(fragment)
    .attach(fragment)
    .commit();
Run Code Online (Sandbox Code Playgroud)

有关删除和分离之间的区别,请参阅此问题

  • 使用 .commitAllowingStateLoss() 代替! (2认同)

Sym*_*851 8

我已经解决了我的问题.我用自己替换当前片段,但在保存当前片段的引用之前,然后我关闭调用onDestroy()的当前片段的生命周期.我记得它是"newFragment"变量.

         

switch (item.getItemId()) { case R.id.menu_refresh: //THIS IS THE CODE TO REFRESH THE FRAGMENT. FragmentManager manager = getActivity().getSupportFragmentManager(); FragmentTransaction ft = manager.beginTransaction(); Fragment newFragment = this; this.onDestroy(); ft.remove(this); ft.replace(container.getId(),newFragment); //container is the ViewGroup of current fragment ft.addToBackStack(null); ft.commit(); return true; }
Run Code Online (Sandbox Code Playgroud)

  • 手动调用生命周期方法永远不是正确的解决方案.你也不需要`newFragment`变量; 你可以再次使用`this`. (5认同)