Symon_9851 Symon_9851 - 3 months ago 165
Android Question

Is it possible to manually call onCreateView in a Fragment?

Is it possible to manually call the method

onCreateView
in a
Fragment
or, if not, is there some way I can simulate this invocation?

I have a
FragmentActivity
with tabHost. Each tab contains a
Fragment
and I want to refresh the
Fragment
's view when I press the "Refresh" button. More specifically, I want to re-call the
onCreateView
method.

My code currently looks like:

@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);

}

Answer

I have resolved my question. I replace the current fragment with itself, but before I have saved a reference of current fragment and then i close life cycle of current fragment invoking onDestroy(). I recall it with "newFragment" variable.

         

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