Article image
Caique Lima
Caique Lima14/10/2022 20:10
Compartilhe

Criando e implementando navegação no Android

  • #Kotlin
  • #Android

Para o funcionamento desse artigo precisamos ter algumas dependências pré-configuradas em nosso projeto. Para configurar essas dependências vamos até a aba de Gradle Scripts.

Adicionando as dependências

Nos plugins do build.gradle (Module: Nome_Do_App.app) precisamos adicionar os seguintes plugins:

plugins { 
id 'kotlin-kapt' id 'androidx.navigation.safeargs.kotlin' 
}

Em seguida ainda no mesmo arquivo precisamos adicionar novas dependências:

//    Navigation
  implementation 'androidx.navigation:navigation-fragment-ktx:2.5.2'
  implementation 'androidx.navigation:navigation-ui-ktx:2.5.2'

Terminando a configuração dentro do build.gradle (Module: Nome_Do_App.app) ainda não fazemos o sync do projeto, pois agora vamos ao build.gradle (Project: Nome_Do_App.app). Nesse mesmo arquivo precisamos adicionar o ultimo plugin: 

plugins {
  id 'androidx.navigation.safeargs.kotlin' version '2.5.0' apply false
}

Todas essas dependências e plugins estão ligados ao navigation, que usaremos em breve para fazer a navegação dentro do projeto.

Esse artigo será dividido em duas partes onde a primeira criaremos a navegação utilizando o navigation do proprio android e a segunda parte será a implementação da RecyclerView e a navegação dos detalhes baseada no card que foi clicado, alguns detalhes serão omitidos explicações, mas caso haja alguma dúvida basta deixar nos comentários que tentarei ajudar.

Finalizado os ajustes necessários criaremos a estrutura para nosso projeto seguindo os seguintes passos:

Criaremos dois fragmentos, um representará a lista que iremos renderizar utilizando o componente de Recycler View e o próximo fragmento representará os detalhes do item.

Criando os fragmentos:

Na barra de opções do Android Studio seguiremos os seguintes passos

image

File > New > Fragment > Fragment (Blank)

Ao seguir esse fluxo será aberta uma tela similar a essa:

image

Definiremos o nome desse primeiro fragmento como ListFragment, após definimos seu nome, clicaremos no botão "finish" e repetiremos o processo para criação do seguindo fragmento que chamaremos de DetailsFragment.

Criando gráfico de navegação

Para criar o gráfico de navegação precisamos seguir os seguintes passos:

File > New > Android Resource File

image

Uma tela similar a essa será aberta e preencheremos o "File Name" com o nome da sua preferência, contudo, irei usar o nome "nav_graph", em seguida mudaremos o "Resource Type" para navegação.

Injetando os fragmentos no gráfico de navegação

Após criar o gráfico de navegação e abrir o mesmo temos uma tela similar a da imagem abaixo:

image

Em seguida clicaremos no ícone em que está selecionado na imagem para adicionar os fragmentos aparecerá uma tela similar a da imagem abaixo:

image

Clicando nos fragmentos que criamos anteriormente, eles serão adicionados ao gráfico de navegação e terá uma aparência similar a imagem a seguir:

image

O ícone de casa em cima do listFragment indica que o mesmo será o destino inicial de quem utilizar o gráfico. A flecha ligando o listFragment ao detailsFragment é um action que será abordada em breve.

Instanciando NavHostFragment

O NavHostFragment de navegação que será o hospedeiro da nossa navegação e atráves dele tomaremos a decisão do que fazer ou pra onde navegar. Para fazer essa instância precisamos ir ao activity_main e adicionaremos o código a seguir:

<androidx.fragment.app.FragmentContainerView
  android:id="@+id/navHostFragment"
  android:name="androidx.navigation.fragment.NavHostFragment"
  android:layout_width="match_parent"
  android:layout_height="0dp"
  app:defaultNavHost="true"
  app:layout_constraintBottom_toTopOf="@+id/button"
  app:layout_constraintEnd_toEndOf="parent"
  app:layout_constraintStart_toStartOf="parent"
  app:layout_constraintTop_toTopOf="parent"
  app:navGraph="@navigation/nav_graph" />

  • Originalmente o Android não tem um componente chamado NavHostFragment então utilizaremos o fragment container view colocando os atributos:
  • name -> Passando o NavHostFragment
  • defaultNavHost -> Passando o valor true
  • navGraph -> Onde passamos o grafico que criamos anteriormente.

Abriremos o arquivo de MainActivity e faremos as seguintes alterações:

package com.caiquebrener.myapplication

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment
import com.caiquebrener.myapplication.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {
  private lateinit var navHostFragment: NavHostFragment
  private lateinit var navController: NavController
  private lateinit var binding: ActivityMainBinding
  override fun onCreate(savedInstanceState: Bundle?) {
      super.onCreate(savedInstanceState)
      binding = ActivityMainBinding.inflate(layoutInflater)
      setContentView(binding.root)
  }

  override fun onStart() {
      super.onStart()
      setupNavigation()
      setupObserver()
  }

  private fun setupClickListener() {
  binding.navigateForDetails.setOnClickListener {
      navController.navigate(ListFragmentDirections.actionListFragmentToDetailsFragment())
  }
  binding.backForListFragment.setOnClickListener {
      navController.navigate(DetailsFragmentDirections.actionDetailsFragmentToListFragment())
  }
}

  private fun setupNavigation() {
      navHostFragment =
          supportFragmentManager.findFragmentById(R.id.navHostFragment) as NavHostFragment
      navController = navHostFragment.navController
  }
}

Explicando o código acima:

Criamos as duas variáveis navHostFragment e navController, pois são elas que farão a configuração final da nossa navegação, duas funções que estão sendo chamadas dentro do onStart.

Explicando setupNavigation()

A setupNavigation chama o suportFragmentManager e procura o nosso navHostFragment atráves do seu Id, o "as" serve para forçar o tipo do fragmento como NavHostFragment.

Por fim chamamos a variável navController e acessamos a propriedade navController, pois a mesma nos dará acesso ao navGraph que faremos a navegação atráves do directions.

Explicando setupClickListener()

Não foi explicado anteriormente, mas criamos dois botões no layout da activity main apenas para navegar entre os fragmentos.

 binding.navigateForDetails.setOnClickListener {
      navController.navigate(ListFragmentDirections.actionListFragmentToDetailsFragment())
}

Ao clicar no botão com o id navigateForDetails chamaremos o navController, que nos dará acesso ao navigate e utilizaremos o Directions, função que teremos acesso graças ao safeArgs que colocamos no build do nosso projeto. Lembra da flecha que configuramos no ato de criação do grafico de navegação, pois bem, atráves do direction teremos acesso a essa action que nos permitirá fazer a navegação para o outro fragmento. De forma similar utilizaremos o directions para voltar para o fragmento de lista.

Por hoje é só pessoal, no próximo artigo faremos a configuração da RecyclerView e configuraremos seu clique.

Link do repositório: Clique aqui

Linkedin: Clique aqui

Compartilhe
Comentários (2)

VA

Vinicius Araujo - 15/10/2022 15:49

Sensacional!!

LL

Lorena Lacerda - 14/10/2022 20:44

Perfeito demais, me ajudou muito!! Continua, por favor.