J'ai une activité contenant des fragments multiples. Activité ont d'abord fragment et il a deux boutons. En cliquant sur ce bouton, je dois remplacer le fragment par fragment nouveau. Chaque fragment a divers widgets et remplace le fragment actuel par divers événements.
C'est mon problème. Comment puis-je y parvenir?.
Suggérez-moi des idées.
vous pouvez remplacer fragment par FragmentTransaction.
Voici.
Faire une interface.
public interface FragmentChangeListener
{
public void replaceFragment(Fragment fragment);
}
implémente votre activité de maintien de fragment avec cette interface.
public class HomeScreen extends FragmentActivity implements
FragmentChangeListener {
@Override
public void replaceFragment(Fragment fragment) {
FragmentManager fragmentManager = getSupportFragmentManager();;
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(mContainerId, fragment, fragment.toString());
fragmentTransaction.addToBackStack(fragment.toString());
fragmentTransaction.commit();
}
}
Appelez cette méthode à partir de fragments comme ceci.
// Dans ton fragment.
public void showOtherFragment()
{
Fragment fr=new NewDisplayingFragment();
FragmentChangeListener fc=(FragmentChangeListener)getActivity();
fc.replaceFragment(fr);
}
J'espère que cela fonctionnera!
REMARQUE: mContainerId est l'identifiant de la vue qui contient les fragments à l'intérieur. Vous devez également remplacer la méthode onString () de Fragment.
Eh bien, même je suis en train d'apprendre Android ..
j'ai résolu le même problème récemment "Comment modifier l'événement de clic du bouton Fragment On"
`buttonNAme.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frame1,new Homefragment());
fragmentTransaction.commit();
}
});`
Ici, "frame1" est l'identifiant de "FRAMELAYOUT" défini dans le XML de DrawerLayer.
donc maintenant Chaque fois que je veux fragmenter une transaction, j’utilise ce code.Chaque fois, il remplacera frame1 par votre dernier fragment.
FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frame1,new newfragment());
fragmentTransaction.commit()
J'espère que cela vous aidera ..
Vous pouvez utiliser ce qui suit pour remplacer un fragment au clic de ce fragment:
getFragmentManager().beginTransaction().replace(R.id.main_content, new insertFragmentNameHere()).addToBackStack(null).commit();
changeFragment()
) (ou appelez une autre méthode qui effectuera le travail) pour changer le fragment).À partir de 2017, il existe différentes bibliothèques qui déclenchent Events using Bus et vous pouvez maintenant l'utiliser pour indiquer à l'activité lorsqu'un événement est déclenché dans un fragment qu'il possède.
Faire référence à:
Vous pouvez vérifier les nouvelles architectures suggérées par Google
Ne pas utiliser l'approche dans la réponse acceptée, devenir vraiment moche avec plus de 3 événements différents à partir de fragments
vous pouvez essayer ce code ça marche très bien avec moi, gonfler la mise en page pour voir, définir le bouton et au clic,
Button btn_unstable;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_home,container,false);
btn_unstable = (Button)view.findViewById(R.id.btn_unstable);
btn_unstable.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.fragment_replace, new UnstableFragment()).commit();
}
});
return view;
}