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