studio regresar programar pasar otro navegar llamar fragments entre desde boton atras anterior activity android android-fragments activity-finish

regresar - programar boton atras android



¿Cómo cerrar el fragmento actual usando el botón como el botón Atrás? (9)

Intenté cerrar el fragmento actual con Imagebutton.

Estoy en Fragment-A y pasará al Fragment-B cuando haga clic en el botón.

Y cuando haga clic en el botón en Fragmento-B, se convertirá en el Fragmento-C y cerrará el Fragmento-B.

Si hago clic en el botón Atrás en Fragment-C, volveré al Fragment-A.

El código que intento es como el siguiente

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(); }

Cuando hago clic en el botón Atrás en el fragmento B, pasa al Fragmento-C.

Pero cuando hago clic en el botón Atrás en Fragment-C, no vuelve al Fragment-A. Vuelve al fondo vacío. Si quiero volver a Fragment-A, tengo que hacer clic en el botón Atrás una vez más.

ASÍ, parece que no cierra el fragmento actual completo.

¿Cómo terminar el fragmento actual como el botón Atrás de Android?


Cambio el código de getActivity().getFragmentManager().beginTransaction().remove(this).commit();

a

getActivity().getFragmentManager().popBackStack();

Y puede cerrar el fragmento.


Del Fragmento A, para ir a B, reemplace A con B y use addToBackstack() antes de commit() .

Ahora, desde el Fragmento B, para ir a C, primero use popBackStackImmediate() , esto traerá de vuelta A. Ahora reemplace A con C, al igual que la primera transacción.


Esta es una forma de Kotlin de hacer esto, he creado un botón en el diseño de fragmentos y luego he puesto onClickListner en ViewCreated.

de acuerdo con @ Viswanath-Lekshmanan comentario

override fun onViewCreated(view: View?, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) btn_FragSP_back.setOnClickListener { activity.onBackPressed() } }


Para aquellos que necesitan descubrir una forma simple

Pruebe getActivity().onBackPressed();


Prueba esto:

ft.addToBackStack(null); // ft is FragmentTransaction

Por lo tanto, cuando presiona tecla de retroceso , la actividad actual (que contiene múltiples fragmentos) cargará el fragmento anterior en lugar de terminar él mismo.


Si necesita manejar la acción más específicamente con el botón Atrás, puede usar el siguiente método:

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; } } });


getActivity().onBackPressed hace todo lo que necesitas. Llama automáticamente al método onBackPressed en la actividad principal.


Prueba esto:

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(); } });