Navegação

A navegação eficaz é uma parte essencial do design de aplicativos Android, garantindo que os usuários possam se movimentar intuitivamente pelo aplicativo e acessar as funcionalidades desejadas. Existem várias técnicas e componentes fornecidos pelo Android para implementar uma navegação fluída e agradável.

1. Navegação Básica com Intenções (Intents)

As intenções são usadas para iniciar atividades, serviços e enviar broadcasts. Para navegação simples entre atividades, você pode usar intenções explícitas:

Intent intent = new Intent(CurrentActivity.this, TargetActivity.class);
startActivity(intent);

2. Usando o Componente Navigation

A Jetpack Navigation é uma biblioteca que ajuda a implementar a navegação de maneira consistente em todo o aplicativo. Ela oferece um editor gráfico no Android Studio para criar e visualizar o grafo de navegação.

Para começar, você precisa adicionar a dependência no seu arquivo build.gradle:

implementation "androidx.navigation:navigation-fragment-ktx:2.3.5"
implementation "androidx.navigation:navigation-ui-ktx:2.3.5"

Criando um Grafo de Navegação:

  1. No Android Studio, clique com o botão direito no seu pacote.
  2. Selecione “New -> Android Resource File”.
  3. Escolha “Navigation” como o tipo de arquivo.

Você pode adicionar destinos ao seu grafo de navegação e definir as transições entre eles visualmente.

Navegação com Fragmentos:

// Inicialize o NavController
NavController navController = Navigation.findNavController(view);

// Navegue para o fragmento de destino
navController.navigate(R.id.action_currentFragment_to_targetFragment);

3. Navegação com BottomNavigationView

O BottomNavigationView é um componente de interface do usuário comum para fornecer navegação entre três a cinco destinos. Para usá-lo com a biblioteca de navegação:

  1. Adicione um BottomNavigationView no seu layout.
  2. Configure um NavigationController:
BottomNavigationView bottomNavigationView = findViewById(R.id.bottom_navigation);
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
NavigationUI.setupWithNavController(bottomNavigationView, navController);

4. Navegação com DrawerLayout (Navigation Drawer)

O DrawerLayout é uma maneira popular de fornecer acesso às diferentes seções do aplicativo. Para configurá-lo com a biblioteca de navegação:

  1. Adicione um DrawerLayout no seu layout.
  2. Configure um NavigationController:
DrawerLayout drawerLayout = findViewById(R.id.drawer_layout);
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController, drawerLayout);
NavigationUI.setupWithNavController(navigationView, navController);

No seu método onOptionsItemSelected():

@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
    return NavigationUI.onNavDestinationSelected(item, navController) || super.onOptionsItemSelected(item);
}

5. Passando Dados entre Destinos

Você pode passar dados entre destinos usando argumentos. Para definir argumentos em um destino:

<fragment
    android:id="@+id/destinationFragment"
    android:name="com.example.myapp.DestinationFragment"
    tools:layout="@layout/fragment_destination">

    <argument
        android:name="argKey"
        app:argType="string" />

</fragment>

Para navegar com argumentos:

Bundle args = new Bundle();
args.putString("argKey", "value");
navController.navigate(R.id.destinationFragment, args);

Implementar uma navegação eficaz em um aplicativo Android não apenas melhora a experiência do usuário, mas também facilita a manutenção e a expansão do código.