5; Necessita do Android Studio 3.2 Apesar de visualmente parecido, não é um Storyboard (recurso utilizado no XCode para desenvolvimento iOS) Problema Proposta Princípios de Navegação Como utilizar? Transições Testes
Testes // Todo mundo já viu um código assim: // Isso quando não temos que controlar um fluxo private void changeFragment(int position){ FragmentManager supportManager = getSupportFragmentManager(); Fragment fragment = supportManager.findFragmentByTag(...); FragmentTransaction transaction = supportManager.beginTransaction(); transaction.setCustomAnimations(R.anim.fade_in, R.anim.fade_out); if (currentFragment != null) { transaction.detach(currentFragment); } if (fragment == null) { fragment = fragmentList.get(position); if (fragment.isDetached()) { transaction.attach(fragment); } else if (!fragment.isAdded()) { transaction.add(R.id.sample, fragment, getFragmentTag()) } transaction.commit(); } else { transaction.attach(fragment); transaction.commit(); } currentFragment = fragment; currentPosition = position; }
Testes • Simplificar navegação entre fragments; • Consequentemente, é necessário o uso de fragments (ಠ_ಠ) ; • Mas o controle é todo feito pelo Navigation \o/ ; • Possui o escopo de Single Activity, portanto, não funciona para navegação entre Activities; • Mas não quer dizer que seu app terá apenas uma Activity.
Testes •A navegação deve possuir um ponto de entrada fixo; •A Stack representa o "estado da navegação" utilizando o padrão L.I.F.O (Ou seja, o ponto de entrada no final da stack e a última tela no topo); •O botão de voltar (Up button) não deve existir no ponto de entrada do app; •O botão de voltar do app (Up) e o botão de voltar do sistema devem possuir o mesmo comportamento; •Acessar o App por deep link deve manter a hierarquia da navegação.
Testes •Configurando um navigation para fluxo: ◦ No Navigation Graph: Definir e incluir todas as Destinations (Telas do fluxo); ▪ Criar as actions entre as destinations (Conectar os destinos); ▪ Definir a "Start destination" do fluxo.
Testes •Configurando um navigation para fluxo: ◦ Na Activity: Incluir um Fragment no XML; ▪ Configurar os atributos defaultNavHost e NavGraph; ▪ No código, sobreescrever o método onSupportNavigateUp para garantir o comportamento do back button.
Testes •Configurando um navigation para fluxo: ◦ No Fragments: ▪ Utilizar o método findNavController().navigate() para navegar ao fragment de destino utilizando o id da Action ou fragment; ▪ Obs.: Utilizar um fragment de destino que não esteja conectado ou action inexistente causará crash.
Testes O Navigation provê uma forma simples de implementar uma animação de transição entre fragments, é necessário: • Criar um resource de animação (fade, slide, etc.) • No editor gráfico, selecionar a Action onde a animação ocorrerá • Na seção de transições, escolher a animação para Enter e Exit • Done! • Shared Elements estarão disponíveis na versão alpha-06: https://issuetracker.google.com/issues/79665225 • Obs.: Poderiam haver mais opções de animações por padrão =/
Testes Existe um pacote de testes para o Navigation, porém, possui apenas uma classe, chamada TestNavigator. Não existe uma recomendação de como utilizá-la e sua documentação não é muito clara.
andar (21) 2240-2030 Cidade Monções Av. Nações Unidas, 11.541 3º andar (11) 4119-0449 Savassi Av. Getúlio Vargas, 671 Sala 800 - 8º andar (31) 3360-8900 Ilha do Leite Rua Sen. José Henrique, 224 2º andar (81) 3018-6299 WWW.CONCRETE.COM.BR