¿Cómo debo implementar onbackpressed() en un fragmento de Kotlin?
Creé una aplicación con 4 fragmentos. Cuando presiono el botón de retroceso en el cuarto fragmento, necesito ir directamente al primer fragmento. He intentado muchas formas, pero ninguna funcionó para mí. Por favor, ayúdeme a encontrar una forma correcta de resolver mi problema.
Actividad Dashboard:
class DashboardActivity: AppCompatActivity() {
private lateinit var dashboardBinding: ActivityDashboardBinding
lateinit var sharedPreference: SharedPreference
private lateinit var navController: NavController
private lateinit var navHostFragment: NavHostFragment
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
sharedPreference = SharedPreference(this)
dashboardBinding = DataBindingUtil.setContentView(this, R.layout.activity_dashboard)
setContentView(dashboardBinding.root)
navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
navController = navHostFragment.navController
val bottomNavigationView = findViewById<bottomnavigationview>(R.id.bottomNavigationView)
bottomNavigationView.setupWithNavController(navController)
}
override fun dispatchTouchEvent(ev: MotionEvent?): Boolean {
currentFocus?.let {
val imm: InputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as (InputMethodManager)
imm.hideSoftInputFromWindow(it.windowToken, 0)
}
return super.dispatchTouchEvent(ev)
}
}
Cuarto fragmento:
“`
class ProfileFragment : Fragment() {
<pre><code>lateinit var sharedPreference: SharedPreference
var dob: String = ""
var email: String = ""
var mobile_no: String = ""
var name: String = ""
var mLogoProgressDialog: ProgressDialog? = null
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val binding = DataBindingUtil.inflate<fragmentprofilebinding>(
inflater,
R.layout.fragment_profile,
container,
false
)
sharedPreference = context?.let { SharedPreference(it) }!!
var text = sharedPreference.getValueString("token")
Log.d("getToken", "" + text)
if (text != null) {
initializeLogoProgressDialog()
callMyProfile(text, binding)
}
binding.signOut.setOnClickListener {
signOut(text)
}
binding.notificyButton.setOnClickListener {
val dialog = NotifyDialog()
dialog.show(requireActivity().supportFragmentManager, "NotifyDialog")
}
binding.editProf.setOnClickListener {
view?.let { it1 ->
val navController = Navigation.findNavController(it1)
val bundle = Bundle()
bundle.putString("sendMob", mobile_no)
bundle.putString("sendEmail", email)
bundle.putString("sendName", name)
bundle.putString("sendDob", dob)
navController.navigate(R.id.action_profileFragment_to_edtUsernameFragment, bundle)
}
}
binding.changePassword.setOnClickListener {
view?.let { it1 ->
Navigation.findNavController(it1)
.navigate(R.id.action_profileFragment_to_changePasswordFragment)
}
}
binding.signOut.setOnClickListener {
if (sharedPreference.getValueString("token") != null) {
sharedPreference.clearSharedPreference()
}
view?.let { it1 ->
Navigation.findNavController(it1)
.navigate(R.id.action_profileFragment_to_loginActivity)
}
}
binding.deleteAccount.setOnClickListener {
val dialog = DeleteDialog()
dialog.show(requireActivity().supportFragmentManager, "DeleteDialog")
}
return binding.root
}
</code></pre>
}
“`
davy.ai
Para resolver este problema, necesitas anular la función onBackPressed() en tu DashboardActivity y manejar el botón de volver atrás tú mismo. Aquí están los pasos que puedes seguir:
Asegúrate de importar las clases y objetos necesarios, como el navController, en tu DashboardActivity.
Prueba el comportamiento lanzando tu aplicación y navegando hasta el cuarto fragmento. Pulsa el botón de volver atrás y comprueba si te lleva directamente al primer fragmento.
Siguiendo estos pasos, deberías poder manejar la pulsación del botón de volver atrás en tu aplicación y navegar correctamente entre tus fragmentos.