es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo mantener la pestaña seleccionada en el TabLayout incluso después de regresar a la página en Android utilizando Kotlin: Para mantener la pestaña seleccionada en el TabLayout luego de regresar a la página en Android utilizando Kotlin, debes seguir estos pasos: 1. En tu archivo de actividad o fragmento donde tienes el TabLayout, asegúrate de tener una instancia del ViewPager y el TabLayout: “` val viewPager: ViewPager = findViewById(R.id.viewPager) val tabLayout: TabLayout = findViewById(R.id.tabLayout) “` 2. Crea una variable para almacenar la posición de la pestaña actualmente seleccionada: “` var selectedTabPosition: Int = 0 “` 3. Luego, asigna un listener a tu TabLayout para guardar la posición de la pestaña cada vez que se seleccione una nueva: “` tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener { override fun onTabSelected(tab: TabLayout.Tab?) { selectedTabPosition = tab?.position ?: 0 } override fun onTabUnselected(tab: TabLayout.Tab?) {} override fun onTabReselected(tab: TabLayout.Tab?) {} }) “` 4. A continuación, en el método `onCreate` de tu actividad o fragmento, después de configurar el adaptador del ViewPager y vincularlo con el TabLayout, puedes establecer la pestaña seleccionada utilizando la posición guardada: “` viewPager.adapter = ViewPagerAdapter(supportFragmentManager) tabLayout.setupWithViewPager(viewPager) viewPager.currentItem = selectedTabPosition “` Con estos pasos, tu TabLayout mantendrá la pestaña seleccionada incluso después de regresar a la página en Android utilizando Kotlin.

Tengo 3 fragmentos en mi diseño de pestañas.
Cuando selecciono el segundo fragmento en mi diseño de pestañas, en ese segundo fragmento estoy haciendo clic en “ver todo” para el segundo fragmento. Después de ingresar a “ver todo” en el segundo fragmento, hago clic en el botón de retroceso.
En ese momento, en mi diseño de pestañas, va al primer fragmento en lugar de quedarse en el segundo fragmento.
Necesito quedarme en el fragmento seleccionado. Por favor ayúdame a hacer esto.

private const val NUM_TABS = 3
class AdaptadorDePaginaDeVistas (fragmentManager: FragmentManager, lifecycle: Lifecycle) :
    FragmentStateAdapter(fragmentManager, lifecycle) {

    override fun getItemCount(): Int {
        return NUM_TABS
    }

    override fun createFragment(position: Int): Fragment {
        return when (position) {
            0 -> {
                FragmentoDeHoy()
            }
            1 -> {
                FragmentoPróximo()
            }
            else -> {
                FragmentoPasado()
            }
        }
    }
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para mantenerse en el fragmento seleccionado después de hacer clic en el botón de retroceso, necesitas anular el método onBackPressed() en tu actividad y establecer el índice de la pestaña actual como el índice de pestaña seleccionada.

    Aquí tienes un ejemplo de código:

    class MainActivity : AppCompatActivity() {
    
        private lateinit var tabLayout: TabLayout
        private lateinit var viewPager: ViewPager2
        private lateinit var viewPagerAdapter: ViewPageAdapter
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            // inicializar vistas y adaptador
            tabLayout = findViewById(R.id.tab_layout)
            viewPager = findViewById(R.id.view_pager)
            viewPagerAdapter = ViewPageAdapter(supportFragmentManager, lifecycle)
    
            // establecer adaptador en el view pager
            viewPager.adapter = viewPagerAdapter
    
            // conectar el tab layout y el view pager
            TabLayoutMediator(tabLayout, viewPager) { tab, position ->
                when (position) {
                    0 -> tab.text = "Hoy"
                    1 -> tab.text = "Próximos"
                    2 -> tab.text = "Pasados"
                }
            }.attach()
        }
    
        override fun onBackPressed() {
            val currentFragment = supportFragmentManager.fragments[viewPager.currentItem]
            if (currentFragment is UpcomingFragment) {
                // establecer el índice de pestaña seleccionada como el índice de pestaña actual
                tabLayout.selectTab(tabLayout.getTabAt(1))
            } else {
                super.onBackPressed()
            }
        }
    }
    

    En este ejemplo, verificamos si el fragmento actual es el fragmento “UpcomingFragment”. Si lo es, establecemos el índice de pestaña seleccionada como el segundo índice de pestaña (que es el “UpcomingFragment”) utilizando el método selectTab() de TabLayout. Si no, llamamos al método super para manejar la pulsación del botón de retroceso como de costumbre.

Comments are closed.