I am developing an application in Android Studio with Kotlin. I have a page called InicioActivity with a navbar. I want the content of the current page to be hidden and the content of the new page to be shown when an item in the navbar is clicked. With my current code, I can only hide the content of the page I’m on, but I can’t show the content of the new page.
Here is my InicioActivity.kt:
class InicioActivity : AppCompatActivity() {
private lateinit var principianteBoton: Button
private lateinit var intermedioBoton: Button
private lateinit var avanzadoBoton: Button
private lateinit var textView: TextView
private lateinit var imagenPrincipiante: ImageView
private lateinit var imagenIntermedio: ImageView
private lateinit var imagenAvanzado: ImageView
private lateinit var binding: InicioBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = InicioBinding.inflate(layoutInflater)
setContentView(binding.root)
setSupportActionBar(binding.toolbar) // Configure the Toolbar as ActionBar
val navView: BottomNavigationView = binding.navView
val navController = findNavController(R.id.nav_host_fragment_activity_main)
val appBarConfiguration = AppBarConfiguration(
setOf(
R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications
)
)
setupActionBarWithNavController(navController, appBarConfiguration)
navView.setupWithNavController(navController)
principianteBoton = findViewById(R.id.botonPrincipiante)
intermedioBoton = findViewById(R.id.botonIntermedio)
avanzadoBoton = findViewById(R.id.botonAvanzado)
textView = findViewById(R.id.textView)
imagenPrincipiante = findViewById(R.id.imagenPrincipiante)
imagenIntermedio = findViewById(R.id.imagenIntermedio)
imagenAvanzado = findViewById(R.id.imagenAvanzado)
principianteBoton.setOnClickListener {
Toast.makeText(this, "Nivel principiante activado.", Toast.LENGTH_SHORT).show()
}
intermedioBoton.setOnClickListener {
Toast.makeText(this, "Nivel intermedio activado.", Toast.LENGTH_SHORT).show()
}
avanzadoBoton.setOnClickListener {
Toast.makeText(this, "Nivel avanzado activado.", Toast.LENGTH_SHORT).show()
}
navView.setOnNavigationItemSelectedListener { item ->
when (item.itemId) {
R.id.navigation_dashboard, R.id.navigation_notifications -> {
// Hide the elements when a navigation item is selected
textView.visibility = View.GONE
imagenPrincipiante.visibility = View.GONE
imagenIntermedio.visibility = View.GONE
imagenAvanzado.visibility = View.GONE
principianteBoton.visibility = View.GONE
intermedioBoton.visibility = View.GONE
avanzadoBoton.visibility = View.GONE
true
}
else -> false
}
}
}
}
This is the XML linked to InicioActivity:
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="60dp"
android:text="@string/bienvenido"
app:layout_constraintBottom_toTopOf="@id/imagenPrincipiante"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.1" />
<ImageView
android:id="@+id/imagenPrincipiante"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_marginTop="96dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.501"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/textView"
app:srcCompat="@drawable/principiante" />
<Button
android:id="@+id/botonPrincipiante"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="PRINCIPIANTE"
app:layout_constraintTop_toBottomOf="@id/imagenPrincipiante"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintVertical_bias="0.3" />
<ImageView
android:id="@+id/imagenIntermedio"
android:layout_width="100dp"
android:layout_height="100dp"
app:srcCompat="@drawable/intermedio"
app:layout_constraintTop_toBottomOf="@id/botonPrincipiante"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintVertical_bias="0.4" />
<Button
android:id="@+id/botonIntermedio"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="INTERMEDIO"
app:layout_constraintTop_toBottomOf="@id/imagenIntermedio"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintVertical_bias="0.5" />
<ImageView
android:id="@+id/imagenAvanzado"
android:layout_width="100dp"
android:layout_height="100dp"
app:srcCompat="@drawable/avanzado"
app:layout_constraintTop_toBottomOf="@id/botonIntermedio"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintVertical_bias="0.6" />
<Button
android:id="@+id/botonAvanzado"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="AVANZADO"
app:layout_constraintTop_toBottomOf="@id/imagenAvanzado"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintVertical_bias="0.7" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/nav_view"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
android:background="?android:attr/windowBackground"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:menu="@menu/bottom_nav_menu" />
<fragment
android:id="@+id/nav_host_fragment_activity_main"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:layout_constraintBottom_toTopOf="@id/nav_view"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:navGraph="@navigation/mobile_navigation" />
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:titleTextColor="@android:color/white"
tools:ignore="MissingConstraints" />
</androidx.constraintlayout.widget.ConstraintLayout>
have tried hiding the objects from the fragment class, but it did not work. I have also tried using a method called onSupportNavigateUp, but it did not work either. Additionally, I tried using onNavigationItemSelected in this way, but it wouldn’t hide anything:
override fun onNavigationItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.navigation_dashboard -> {
Log.d("NAV", "Dashboard selected")
// Hide the elements when a navigation item is selected
textView.visibility = View.GONE
imagenPrincipiante.visibility = View.GONE
imagenIntermedio.visibility = View.GONE
imagenAvanzado.visibility = View.GONE
principianteBoton.visibility = View.GONE
intermedioBoton.visibility = View.GONE
avanzadoBoton.visibility = View.GONE
return true
}
R.id.navigation_notifications -> {
Log.d("NAV", "Notifications selected")
textView.visibility = View.GONE
imagenPrincipiante.visibility = View.GONE
imagenIntermedio.visibility = View.GONE
imagenAvanzado.visibility = View.GONE
principianteBoton.visibility = View.GONE
intermedioBoton.visibility = View.GONE
avanzadoBoton.visibility = View.GONE
return true
}
}
return false
}
Beñat Martínez is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.