Kotlin: Es necesario hacer doble clic en los botones dentro de un fragmento antes de iniciar la actividad. ¿Cómo puedo iniciar la actividad con un solo clic?
Nuevo aquí! Estoy teniendo dificultades para aprender el ciclo de vida de los fragmentos y estoy atrapado en este problema. Si ejecuto esto en el emulador, el fragmento se muestra en la actividad, pero el botón dentro del fragmento debe hacer clic dos veces para ejecutar la actividad de destino.
FragmentSetting.kt:
class FragmentSetting : Fragment(), View.OnClickListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val view: View = inflater!!.inflate(R.layout.fragment_main_setting, container, false)
val btnLogout: Button = view.findViewById(R.id.btn_logout)
val btnArticle: Button = view.findViewById(R.id.btn_art)
btnLogout.setOnClickListener(this)
btnArticle.setOnClickListener(this)
return view
}
companion object {
fun newInstance(): FragmentSetting {
return FragmentSetting()
}
}
override fun onClick(v: View?) {
when (v?.id) {
R.id.btn_logout -> {
btn_logout.setOnClickListener {
Toast.makeText(getContext(), "Cerrado sesión.", Toast.LENGTH_SHORT).show()
FirebaseAuth.getInstance().signOut()
val intent = Intent(activity, SignInActivity::class.java)
startActivity(intent)
}
}
R.id.btn_art -> {
btn_art.setOnClickListener {
Toast.makeText(getContext(), "Hola Mundo", Toast.LENGTH_SHORT).show()
val intent = Intent(activity, ArticleActivity::class.java)
startActivity(intent)
}
}
}
}
}
davy.ai
La razón por la cual se necesita hacer clic dos veces en el botón dentro del fragmento para ejecutar la actividad de destino es porque el método
setOnClickListener
se llama dentro del métodoonClick
. Esto significa que el primer clic solo establece el escuchador para el botón, y el segundo clic realmente ejecuta el código dentro del escuchador.Para solucionar esto, mueve el método
setOnClickListener
fuera del bloquewhen
y colócalo dentro del métodoonViewCreated
en su lugar. Aquí tienes una versión actualizada del código:Con estos cambios, hacer clic en el botón una vez debería ejecutar la actividad de destino.