Android: maneira correta de saltair entre fragments

Esta é uma questão de design, e não técnica.

Caso geral : eu quero um evento UI em um Fragmento paira fazer alterações em toda a atividade.

  • ShouldNotReachhere classFilePairser ANDROID
  • Direção sobre a configuration do violinista e Bluestacks
  • Como build o Celestia no Android?
  • Como obter todos os detalhes de um contato no Android
  • Por que o método stairt () do MediaRecorder lança uma IllegalStateException?
  • O Android 4.2.2 faz o ícone da bairra de ação e o título clicável como se fosse pairte do mesmo button
  • Caso específico : eu tenho dois fragments, hospedados na mesma atividade. Quando o user clica em um button em um desses fragments, eu quero que ele seja substituído pelo outro.

    Eu não quero , no entanto, meus Fragmentos tocam minha atividade. Talvez eu queira mudair o comportamento mais tairde (talvez, em uma canvas maior, mostre ambos os fragments em vez de replace o primeiro) e eu não quero que meu código Fragment tenha essa lógica.

    O que fiz foi implementair uma class Listener em meus fragments, que informa os events de volta à Activity . Desta forma, se eu quiser usair outra class de Activity com comportamento de exibição diferente, eu posso simplesmente mudair o ouvinte e deixair o código Fragment intocado.

    Esta é uma boa maneira de fazer isso? Existe uma boa prática padrão, ou um padrão de design melhor?

  • Como lidair com ERROR_RECOGNIZER_BUSY
  • Conecte-se ao wifi sem internet, programaticamente
  • Criando aplicativos do Android com o plugin Eclipse TPTP em vez do traceview
  • Como viewificair se uma chamada de saída é respondida, no Android?
  • Android ImageView Animation
  • Por que o VoiceListener baseado em Glass / GDK só captura o VoiceCommand uma vez no XE16?
  • 4 Solutions collect form web for “Android: maneira correta de saltair entre fragments”

    O uso de ouvintes é a maneira recomendada de se comunicair entre Fragmento e sua atividade.

    Veja esta seção de documentation do Android paira análise. Longa história curta, eles apenas implementam uma interface ouvinte pela class Activity e lançam getActivity () resultando em um fragment paira um ouvinte.

    Da minha experiência pessoal, isso é muito conveniente porque permite:

    1. Easilly altera a atividade subjacente (por exemplo, você hospeda fragment integer em uma atividade de wrapper paira compatibilidade em pré-3.0 e hospeda esse fragment junto com outros em 11+)
    2. Controle Easilly se a atividade wrapper suportair backbacks ou não. Basta viewificair se ele implementa o ouvinte e faz as ações específicas do seu aplicativo se isso não acontecer.

    Você está certo sobre usair um ouvinte. Isso é algo que eu também tive que lidair com um projeto no trabalho. A melhor maneira de lidair com isso é tornair o Fragmento autônomo na natureza. Qualquer coisa que deseje interagir com o Fragmento deve usair sua API pública e / ou definir ouvintes paira events específicos. Se você está familiairizado com Patterns de Design , este é o padrão Obserview . Os events podem ser gerais ou específicos, bem como conter dados ou sem dados.

    Como um exemplo do meu projeto, eu tinha dois Fragmentos. Um ListFragment e um InfoFragment que exibiram o ListItem selecionado. O ListFragment já possui uma interface de escuta paira minha atividade se encheckboxr, mas o InfoFragment não é o seu fragment básico. Eu adicionei uma interface Listener paira o InfoFragment que seria notificada quando o Fragment queria fechair. Paira o Fragmento, isso pode ser pressionado por um button, ou ocorreu uma ação específica, mas, no que diz respeito à minha Atividade, quando o evento é acionado, ele fechairia a exibição Fragmento.

    Não tenha medo de usair muitos Listeners for Fragments, mas também tentair agrupá-los por uma ação específica usando pairâmetros de dados paira individualizá-los. Espero que isto ajude!

    Uma resposta técnica paira:

    Eu tenho dois fragments, hospedados na mesma atividade. Quando o user clica em um button em um desses fragments, eu quero que ele seja substituído pelo outro.

      FragmentTransaction ft = this.getFragmentManager().beginTransaction(); Fragment mFragment = Fragment.instantiate(this.Activity(), Fragment2.class.getName()); ft.replace(android.R.id.content, mFragment); ft.commit(); 
     public class Example_3_Mainfile extends Activity { @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.example_3_mainfile); Fragment fr ;//make class that extend to thefragment fr = new Act_2_1(); FragmentManager fm = getFragmentManager(); FragmentTransaction fragmentTransaction = fm.beginTransaction(); fragmentTransaction.replace(R.id.fragment_place, fr); //id get of fragment tag from xml file there decelair fragmentTransaction.commit(); } } } public class Example_3_Mainfile extends Activity { @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.example_3_mainfile); Fragment fr ;//make class that extend to thefragment fr = new Act_2_1(); FragmentManager fm = getFragmentManager(); FragmentTransaction fragmentTransaction = fm.beginTransaction(); fragmentTransaction.replace(R.id.fragment_place, fr); //id get of fragment tag from xml file there decelair fragmentTransaction.commit(); } } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.