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

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

我有一个带tabHost的FragmentActivity 。 每个选项卡都包含一个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); } 

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

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

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

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


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; }

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

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