12

que tiene un fragmento:Fragmento: el cual devolución de llamada invoca cuando pulse el botón Atrás y personalizarlo

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

I instanciarlo:

MyFragment myFragment = new MyFragment(); 

uso el fragmento anterior para reemplazar el fragmento actual:

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 

Ahora, myFragment aparece en la pantalla. NOTA: No agregué myFragment a detrás de la pila.

Mis dos preguntas:

1. Si ahora, pulse teléfono móvil volver botón, que el fragmento de devolución de llamada de ciclo de vida será invocado ??

2. ¿Cómo puedo personalizar el botón de retroceso detector de clics en MyFragment clase? (Por favor no me sugieren hacer myFragment.getView().setOnclickListener, pero hacerlo en MyFragment clase)

Respuesta

21

Pregunta 1: Ver http://developer.android.com/reference/android/app/Fragment.html#Lifecycle:

"Como ya no se está utilizando un fragmento, que pasa por una inversa serie de devoluciones de llamada:.

onPause() - fragmento ya no está interactuando con el usuario, ya sea debido a que su actividad está siendo pausa o una operación de fragmento es modificándola en la actividad

onStop(): el fragmento ya no es visible para el usuario porque su actividad se está deteniendo o una operación de fragmento lo está modificando en la actividad.

onDestroyView(): permite que el fragmento limpie los recursos asociados con su Vista.

onDestroy() - llamado para hacer la limpieza final del estado del fragmento.

onDetach() - llamada inmediatamente antes del fragmento ya no está asociada a su actividad "

Pregunta 2:. Si usted debe saber que era el botón de retroceso específicamente que está activando las devoluciones de llamada, puede capturar el botón Atrás, presione la Actividad de su Fragmento y use su propio método para manejarlo:

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 
    } 
} 
+0

Esto se puede usar solo f o limpieza Creo que Mar fue para evitar el fragmento de intercambio de backstack si el uso presiona el botón Atrás. – ATom

+0

En mi caso, 'onBackPressed()' no se estaba llamando. Lo arreglé enfocándome en la vista de fragmento mediante getView(). SetFocusableInTouchMode (true); getView(). RequestFocus(); en onResume(). –

Cuestiones relacionadas