Est-il possible d'appeler manuellement la méthode onCreateView
dans un Fragment
ou, sinon, est-il possible de simuler cette invocation?
J'ai un FragmentActivity
avec tabHost. Chaque onglet contient un Fragment
et je souhaite rafraîchir la vue de Fragment
lorsque j'appuie sur le bouton "Actualiser". Plus précisément, je souhaite rappeler la méthode onCreateView
.
Mon code ressemble actuellement à:
@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);
}
J'ai résolu ma question. Je remplace le fragment actuel par lui-même, mais avant d'avoir enregistré une référence du fragment actuel, puis je ferme le cycle de vie du fragment actuel en invoquant onDestroy (). Je m'en souviens avec 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;
}
Parfois, j'ai trouvé que le remplacement de FragmentTransaction ne fonctionnerait pas pour remplacer un fragment par lui-même, ce qui fonctionne pour moi est d'utiliser détacher et attacher:
getSupportFragmentManager()
.beginTransaction()
.detach(fragment)
.attach(fragment)
.commit();
Voir cette question pour la différence entre supprimer et détacher
Vous pouvez simplement demander à votre bouton de remplacement de remplacer la disposition actuelle par une nouvelle instance du fragment.
// onButtonClick
SomeFragment fragment = new SomeFragment();
getFragmentManager().beginTransaction().replace(R.id.current_layout, fragment).commit();