web-dev-qa-db-fra.com

Fragment: quel rappel invoqué en appuyant sur le bouton de retour et le personnaliser

J'ai un fragment:

public class MyFragment extends Fragment{
     ...
     @Override
     public View onCreateView(...){...}    
     ...
}

Je l'instancie:

MyFragment myFragment = new MyFragment();

J'utilise le fragment ci-dessus pour remplacer le fragment actuel:

FragmentManager fragmentManager = activity.getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

// replace fragment
fragmentTransaction.replace(R.id.fragment_placeholder, myFragment, "myTag");

// NOTE: I did not add to back stack

Maintenant, myFragment est affiché à l'écran. NOTE: Je n'ai pas ajouté myFragment à back stack .

Mes deux questions:

1. Si maintenant, j'appuie sur téléphone portable retour bouton, le rappel du cycle de vie du fragment sera appelé ?? 

2. Comment personnaliser le bouton précédent cliquer sur l'écouteur dans la classe MyFragment? (veuillez ne pas me suggérer de faire myFragment.getView().setOnclickListener, mais le faire dans la classe MyFragment)

14
Leem.fin

Question 1: Voir http://developer.Android.com/reference/Android/app/Fragment.html#Lifecycle :

"Comme un fragment n’est plus utilisé, il passe par une série inversée de rappels:

onPause () - fragment n'interagit plus avec l'utilisateur, car son activité est suspendue ou une opération de fragment le modifie dans l'activité.

onStop () - le fragment n'est plus visible par l'utilisateur, car son activité est en cours d'arrêt ou une opération de fragment le modifie dans l'activité.

onDestroyView () - permet au fragment de nettoyer les ressources associées à sa vue.

onDestroy () - appelé pour effectuer le nettoyage final de l'état du fragment.

onDetach () - appelé juste avant que le fragment ne soit plus associé à son activité. "

Question 2: Si vous devez savoir que c'est le bouton retourspécifiquementqui déclenche les rappels, vous pouvez capturer l'appui du bouton retour dans l'activité de votre fragment et utiliser votre propre méthode pour gérer il:

public class MyActivity extends Activity
{
    //...
    //Defined in Activity class, so override
    @Override
    public void onBackPressed()
    {
        super.onBackPressed();
        myFragment.onBackPressed();
    }
}

public class MyFragment extends Fragment
{
    //Your created method
    public void onBackPressed()
    {
        //Handle any cleanup you don't always want done in the normal lifecycle
    }
}
22
Taylor Clark

androidx.activity 1.0.0-alpha01 est publié et introduit ComponentActivity, une nouvelle classe de base de FragmentActivity et AppCompatActivity existants.

Vous pouvez maintenant enregistrer une OnBackPressedCallback via addOnBackPressedCallback pour recevoir des rappels onBackPressed () sans avoir à remplacer la méthode dans votre activité.

0
Darish