J'ai essayé de fermer le fragment actuel en utilisant Imagebutton.
Je suis dans le fragment A et il se tournera vers le fragment B lorsque je clique sur le bouton.
Et quand je clique sur le bouton en Fragment-B, il se tournera vers le Fragment-C et fermera le Fragment-B.
Si je clique sur le bouton Précédent de Fragment-C, il reviendra à Fragment-A.
Le code que j'ai essayé est le suivant
camera_album = (ImageButton) view.findViewById(R.id.camera_album);
camera_album.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
closefragment();
Fragment fragment = FileBrowserFragment.newInstance(null, null, null) ;
MainActivity.addFragment(LocalFileBrowserFragment.this, fragment) ;
}
});
private void closefragment() {
getActivity().getFragmentManager().beginTransaction().remove(this).commit();
}
Lorsque je clique sur le bouton de retour du fragment B, il se tourne vers le fragment C.
Mais lorsque je clique sur le bouton Précédent de Fragment-C, il ne revient pas à Fragment-A ..__, mais à l'arrière-plan vide. Si je veux revenir au fragment A, je dois cliquer à nouveau sur le bouton Précédent.
SO, il semble ne pas fermer le fragment actuel complet.
Comment terminer le fragment actuel comme le bouton de retour d'Android?
À partir du fragment A, pour aller à B, remplacez A par B et utilisez addToBackstack()
avant commit()
.
Maintenant, à partir du fragment B, allez à C, utilisez d'abord popBackStackImmediate()
, cela ramènera A. Maintenant, remplacez A par C, comme pour la première transaction.
Je change le code de getActivity().getFragmentManager().beginTransaction().remove(this).commit();
à
getActivity().getFragmentManager().popBackStack();
Et cela peut fermer le fragment.
Pour ceux qui ont besoin de trouver un moyen simple
Essayez getActivity().onBackPressed();
Essaye ça:
ft.addToBackStack(null); // ft is FragmentTransaction
Ainsi, lorsque vous appuyez sur back-key , l'activité en cours (qui contient plusieurs fragments) chargera le fragment précédent au lieu de se terminer elle-même.
C’est une façon de faire Kotlin, j’ai créé un bouton dans la disposition des fragments, puis jeté onClickListner dans onViewCreated.
selon le commentaire de @ Viswanath-Lekshmanan
override fun onViewCreated(view: View?, savedInstanceState: Bundle?)
{
super.onViewCreated(view, savedInstanceState)
btn_FragSP_back.setOnClickListener {
activity.onBackPressed()
}
}
Vous pouvez essayer cette logique parce que cela a fonctionné pour moi.
frag_profile profile_fragment = new frag_profile();
boolean flag = false;
@SuppressLint("ResourceType")
public void profile_Frag(){
if (flag == false) {
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
manager.getBackStackEntryCount();
transaction.setCustomAnimations(R.anim.transition_anim0, R.anim.transition_anim1);
transaction.replace(R.id.parentPanel, profile_fragment, "FirstFragment");
transaction.commit();
flag = true;
}
}
@Override
public void onBackPressed() {
if (flag == true) {
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
manager.getBackStackEntryCount();
transaction.remove(profile_fragment);
transaction.commit();
flag = false;
}
else super.onBackPressed();
}
Essaye ça:
public void removeFragment(Fragment fragment){
Android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
Android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.remove(fragment);
fragmentTransaction.commit();
}
Button ok= view.findViewById(R.id.btSettingOK);
Fragment me=this;
ok.setOnClickListener( new View.OnClickListener(){
public void onClick(View v){
getActivity().getFragmentManager().beginTransaction().remove(me).commit();
}
});
getActivity().onBackPressed
fait tout ce dont vous avez besoin. Il appelle automatiquement la méthode onBackPressed dans l'activité parent.
Si vous devez gérer l'action plus spécifiquement avec le bouton Précédent, vous pouvez utiliser la méthode suivante:
view.setFocusableInTouchMode(true);
view.requestFocus();
view.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if( keyCode == KeyEvent.KEYCODE_BACK )
{
onCloseFragment();
return true;
} else {
return false;
}
}
});
Essaye celui-là
getActivity().finish();