Navegação entre Fragments

470 views
Skip to first unread message

Clovis Lemes Ferreira Junior

unread,
Jul 11, 2014, 8:41:47 AM7/11/14
to androidb...@googlegroups.com
Olá pessoal,

Estou desenvolvendo uma app com Drawer Navigation seguindo os passos do Android Developer onde eu troco o conteúdo principal por Fragments, até ai tudo bem.

Mais eu tenho uma tenha com 3 níveis sendo elas Fragments.

Por exemplo:

No primeiro Fragment tenho um ListView, clicando em um item ele vai para o 2º Fragment com outro ListView, da mesma forma esse 2º Fragment também tem um ListView que direciona para o 3º Fragment.

Minha dúvida é se estou fazendo da forma correta essa troca de Fragments na opinião de vocês.

1º Fragment

listViewMaquinas.setOnItemClickListener(new AdapterView.OnItemClickListener(){

	@Override
public void onItemClick(AdapterView<?> viewPai, View view, int posicao, long id) {
            MaquinaModel maquina = (MaquinaModel) viewPai.getAdapter().getItem(posicao);

            FragmentManager fragmentManager = getFragmentManager();
            Bundle bundle = new Bundle();
            bundle.putSerializable("maquina", maquina);

            MaquinaDetalhe maquinaDetalhe = new MaquinaDetalhe();
            maquinaDetalhe.setArguments(bundle);

            fragmentManager.beginTransaction().replace(R.id.content_frame, maquinaDetalhe).addToBackStack(null).commit();

}
			
});

O 2º Fragment faz da mesma forma para o 3º Fragment;

O que estou fazendo aqui é comunicando um Fragment com o outro, lendo a documentação do Android ele não recomenda fazer isso:

"Often you will want one Fragment to communicate with another, for example to change the content based on a user event. All Fragment-to-Fragment communication is done through the associated Activity. Two Fragments should never communicate directly."


Então, como vocês tem feito nesse caso ?

Rudson Lima

unread,
Jul 11, 2014, 1:35:28 PM7/11/14
to androidb...@googlegroups.com
Isso já diz tudo

"Often you will want one Fragment to communicate with another, for example to change the content based on a user event. All Fragment-to-Fragment communication is done through the associated Activity. Two Fragments should never communicate directly."

E você estar fazendo exaltamento o que o texto acima diz.. 


Com base em exemplos da própria Google faz o seguinte.. 

onItemClick -> que chama uma Activity -> que por sua vez chama o Fragments.


--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.



--
Rudson Lima ( live-O ) Desenvolvedor Android
Contato +55 85 87050560 - Fortaleza-ce
Social facebook | google+ | linkedin

Danilo Mendonça

unread,
Jul 11, 2014, 1:43:05 PM7/11/14
to androidb...@googlegroups.com
Clovis, cria um Listener no seu Fragment e faça sua Activity implementar esse listener. 

Sempre que você executar qualquer método do Listener no Fragment, ele vai executar o método implementado na Activity.

Então, da Activity, você pode acessar qualquer outro Fragment. Inclusive criar um novo.

Abs



Danilo Mendonça Yotta Apps – Desenvolvendo Aplicativos
Site | Blog Facebook | Twitter |   
 | 
**Já viu nossos games: Delivery Box Robot Escape?

Clovis Lemes Ferreira Junior

unread,
Jul 11, 2014, 1:57:46 PM7/11/14
to androidb...@googlegroups.com
@Rudson e @Danilo

Obrigado pelas respostas, até cheguei a fazer com os Listeners sugerido pelo Danilo, o problema é que achei estranho minha Activity de Navigation ficar implementando 3 Listeners para cada Fragment (Isso para uma tela), tenho mais telas com navegação em 2 níveis, então vou ter implementar o quarto listener, é isso mesmo?

Ai cai na questão, não seria melhor então ter uma activity para cada tela e dentro dela ter meus fragments para implementar essa navegação entre os níveis? Mas não sei como ficaria o Navigation Drawer + ActionBar, talvez uma classe com isso e as activities herdando dela.

Ha, @Rudson, estou utilizando seu projeto com Navigation Drawer, parabéns !!! (https://github.com/rudsonlive/Navigation-Drawer-ActionBarCompat)



Clóvis Lemes Ferreira Júnior

Rudson Lima

unread,
Jul 11, 2014, 2:14:25 PM7/11/14
to androidb...@googlegroups.com
Opa @Clovis. Espero que o projeto tenha lhe ajudado. Qualquer duvida sobre ele pode mandar privado blz?

Danilo Mendonça

unread,
Jul 11, 2014, 2:14:28 PM7/11/14
to androidb...@googlegroups.com
Vai depender muito de como suas telas estão organizadas, mas tem dois pontos que podem te dar uma luz:

1) Você pode implementar vários métodos dentro do mesmo Listener (se fizer sentido, claro).

2) Não economize Activity. Tentar criar poucas Activitys e gerenciar muitos Fragments normalmente não é uma boa estratégia. Se você não quer duplicar código em mais de uma Activity, utilize classes externas (composição/helper) ou até herança.

Abs

Danilo Mendonça Yotta Apps – Desenvolvendo Aplicativos
Site | Blog Facebook | Twitter |   
 | 
**Já viu nossos games: Delivery Box Robot Escape?


Clovis Lemes Ferreira Junior

unread,
Jul 11, 2014, 3:00:23 PM7/11/14
to androidb...@googlegroups.com
Danilo, valeu cara,


Esses dois pontos vão me ajudar a refletir o que será melhor.

Marcelo Alves

unread,
Jul 11, 2014, 4:15:04 PM7/11/14
to androidb...@googlegroups.com
Não vi a sugestão de usar EventBus/Otto pra esse caso. Tem algum motivo pra não terem recomendado?​ 

Geovani de Souza

unread,
Jul 11, 2014, 4:42:47 PM7/11/14
to androidb...@googlegroups.com, marcel...@me.com
Marcelo, ia falar nisso agora...

Otto é uma opção excelente no caso de ter muitas "mensagens" trocadas entre os componentes. Crie um Bus na Application e linke tudo. Se estiver usando o Android Studio, pode usar este plugin que ajuda a navegar entre os emissores e receptores pra não se perder...

Danilo Mendonça

unread,
Jul 11, 2014, 5:20:11 PM7/11/14
to androidb...@googlegroups.com, marcel...@me.com
Eu não recomendei por que não conhecia :)

A primeira vista me pareceu bacana!

Danilo Mendonça Yotta Apps – Desenvolvendo Aplicativos
Site | Blog Facebook | Twitter |   
 | 
**Já viu nossos games: Delivery Box Robot Escape?


Em 11 de julho de 2014 17:42, Geovani de Souza <geovani...@gmail.com> escreveu:
Marcelo, ia falar nisso agora...

Otto é uma opção excelente no caso de ter muitas "mensagens" trocadas entre os componentes. Crie um Bus na Application e linke tudo. Se estiver usando o Android Studio, pode usar este plugin que ajuda a navegar entre os emissores e receptores pra não se perder...

--
Reply all
Reply to author
Forward
0 new messages