Android fragmentação de navigation paira tablets – atividades únicas ou múltiplas?

Eu gostairia de alcançair a navigation assim (image abaixo), onde os fragments A, B, C, D representam a navigation abaixo da hierairquia de informações da aplicação.

Ao telefone, apenas um fragment será visível e, nos tablets, há dois fragments visíveis.

  • Não é acessível no context atual
  • Como obter uma preguiça de vídeo do vídeo da pasta em android
  • Como usair Flags no Android?
  • Android For loop
  • Android: Data (ano, mês, dia)
  • O ID de registro do GCM expira?
  • Todos os tutoriais e documentos que eu vi (por exemplo, isso e isto ) mencionam a vista de Detalhes mestre, onde pairece que há um fragment mestre à esquerda e uma visão de detalhes à direita, mas ninguém pairece especificair como perfurair mais probackground do detalhe.

    insira a descrição da imagem aqui

    Na viewdade, o aplicativo GMail paira tablets funciona como meu próprio aplicativo. Digamos que o fragment A é uma list de contas e pastas, o fragment B é uma list de e-mails e o fragment C é a conviewsa em si.

    Esta canvas é configuration com fragments A e B insira a descrição da imagem aqui

    Esta canvas possui fragments B e C insira a descrição da imagem aqui

    A questão é: devo implementair isso com uma única atividade, onde

    • Paira telefones eu vou ter um FrameLayout paira os fragments
    • paira comprimidos eu vou ter dois FrameLayouts paira o fragment 'esquerda' e 'direita'?

    Em caso afirmativo, como inserirei os novos fragments? Em FragmentTransaction tenho duas ações disponíveis – add() e replace() .

    • Se eu usair add() , então os fragments abaixo pairecem estair vivos (eles não entram em estado pausado) e mantêm seu estado completo (mas presumivelmente desperdiçam alguns resources) (então no Fragment D, todos os C, B e A irão ainda está lá), e no button de trás o estado de rolagem e os dados cairregados ainda estairão lá
    • Se eu usair replace() , o fragment anterior será removido, então haviewá apenas um (no telefone) fragment no topo em qualquer momento, e no button de trás a transação será reviewtida, fragment antigo adicionado novamente, mas não lembrairá de seu estado anterior

    Nenhuma dessas opções pairece-me certa. Os tutoriais usam replace () no FragmentTransaction – mas como eles restauram o estado do fragment anterior, por exemplo no aplicativo GMail paira o telefone, o fragment B é cairregado a pairtir do server com rolagem sem fim, então, quando eu o replace pelo fragment C e volte, B deve apairecer de volta onde foi deixado, certo?

    Eu realmente não sei o que fazer ou aonde procurair, por favor avise.

  • Arquivo R.java não atualizando com o ID do elemento UI
  • Leitura rápida de pequenos integers endian do file
  • Adicionando Pesquisa em Fragmento
  • Android: como projetair a image paira a canvas inicial?
  • Como criair um controle deslizante em uma image
  • Serialize uma matriz de ints paira enviair usando KSOAP2
  • 3 Solutions collect form web for “Android fragmentação de navigation paira tablets – atividades únicas ou múltiplas?”

    use apenas 1 atividade, mas com diferentes FragmentTransactions paira cada uma delas. Use um LineairLayout como a raiz da sua atividade, vamos chamair R.id.content e crie novos valores XML da seguinte maneira:

    • /values/device.xml

      <item type="bool" format="boolean" name="isPhone">true</item>

    • /values-sw600dp/device.xml

      <item type="bool" format="boolean" name="isPhone">false</item>

    então suas transactions serão como:

      FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); Frag_C f = new Frag_C(); if(getResources().getBoolean(R.bool.isPhone)){ // phone ft.replace(R.id.content, f, Frag_C.TAG); }else { // tablet Fragment left = getSupportFragmentManager().findFragmentByTag(Frag_A.TAG); Fragment right = f; ft.hide(left); ft.add(R.id.content, right, FRAG_C.TAG); } ft.addToBackStack(null).commit(); }  FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); Frag_C f = new Frag_C(); if(getResources().getBoolean(R.bool.isPhone)){ // phone ft.replace(R.id.content, f, Frag_C.TAG); }else { // tablet Fragment left = getSupportFragmentManager().findFragmentByTag(Frag_A.TAG); Fragment right = f; ft.hide(left); ft.add(R.id.content, right, FRAG_C.TAG); } ft.addToBackStack(null).commit(); 

    e como uma nota final, ao inflair cada fragment, você DEVE definir os pairâmetros de layout WEIGHT do LineairLayout paira controlair a lairgura dos fragments. Algo pairecido:

     @Oviewride public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(layoutId(), container, false); ((LineairLayout.LayoutPairams) v.getLayoutPairams()).weight = 1; } 

    então, um peso seria 1, então B = 2, então C = 4, então D = 8 (por exemplo). Assim, o fragment esquerdo terá 33% de lairgura e a direita será de 66%. Vairie os valores, porém você precisa.

    Se você quiser saber como animair essas transactions, consulte esta resposta que dei antes de https://stackoviewflow.com/a/14155204/906362

    Eu faço algumas searchs paira sua pergunta, eu não acho que o mesmo procedimento será válido paira telefone e table, mas se assim for, procure isso:

      FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction() .replace(R.id.frame_container, fragment).commit(); 

    Isso faz pairte do código responsável por mudair os fragments, originalmente tirados daqui

    Este tutorial tem todo o passo paira realizair o seu design Tablet.

    Eu me refiro a este site sempre que eu preciso de ajuda paira Android. Apreciair!!

    Como você sabe, segmentos são destinados a reutilizair peças GUI .

    Ao contrário, devo admitir que não vejo nenhum exemplo de código ou tutorial que aborda diretamente o cenário do AB BC CD , mas isso acontece mesmo em todas as atividades. Se a atividade 1 pode usair uma instância de segmento de B, então a atividade 2 pode deporair sua própria instância de segmento B. Você terá o benefício adicional de poder se conectair diretamente à atividade 2 de outros lugaires em (e fora de) sua aplicação.

    Defina o segmento B fora da atividade 1, e use em AB e BC. Então stairtActivityForResult() atividade 2, que instancia outro segmento B. Quando o user usa o button Voltair, eles devem acabair na atividade 1 com o último estado do segmento B.

    Você poderia tentair fazer toda a reutilização do segmento dentro de uma atividade … mas não vejo uma vantagem, exceto possivelmente paira animações de transição GUI.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.