android fragment android-view fragment-tab-host

android - ¿Es posible llamar manualmente a onCreateView en un fragmento?



android-view fragment-tab-host (3)

A veces descubrí que la sustitución de FragmentTransaction no funcionaría para reemplazar un fragmento consigo mismo, lo que sí me funciona es usar separar y adjuntar:

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

Vea esta pregunta para ver la diferencia entre eliminar y separar

¿Es posible llamar manualmente el método onCreateView en un Fragment o, si no es así, hay alguna manera de simular esta invocación?

Tengo un FragmentActivity con tabHost. Cada pestaña contiene un Fragment y deseo actualizar la vista del Fragment cuando presiono el botón "Actualizar". Más específicamente, quiero volver a llamar al método onCreateView .

Mi código actualmente se ve como:

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


He resuelto mi pregunta. Reemplazo el fragmento actual por sí mismo, pero antes de guardar una referencia del fragmento actual y luego cierro el ciclo de vida del fragmento actual invocando onDestroy (). Lo recuerdo con la variable "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; }


Simplemente puede hacer que su botón de reemplazo reemplace el diseño actual con una nueva instancia del fragmento.

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