Como lidar com vários fragmentos para uma única atividade

Recentemente, comecei a dar uma olhada no desenvolvimento de aplicativos para o meu dispositivo Android. O que começou esse interesse para mim é que eu estava brincando com alguns arduinos e tive a ótima idéia de fazê-los se comunicar com meu telefone, como por exemplo uma interface para quaisquer valores que estou medindo no próprio arduino. Agora eu poderia pegar o caminho mais fácil e usar uma fonte pública para fazer isso, mas não há muito o que aprender dessa maneira, e eu gostaria do jeito que eu quero.

Agora, suponho que a primeira pergunta que preciso fazer seja: vários fragmentos / atividade única seriam a melhor maneira de conseguir isso? Basicamente, eu quero uma conexão com o arduino, puxe todos os valores, mas dependendo da "guia" que selecionei, quero que certos valores sejam exibidos de várias maneiras. Decidi fazer de cada guia um fragmento diferente e apenas exibir os valores de maneiras diferentes. Como eu disse, estou apenas começando a experiência de desenvolvimento do Android, então não há muito o que basear essa opção.

Então, sendo fixado nessa idéia de múltiplos fragmentos, tenho:

Criou vários arquivos Fragment.xmlDefiniu uma classe para cada visualização separadaCriou uma lista para exibir fragmentos disponíveisFragmento instanciado e exibido quando selecionado

Então, basicamente, meu onMenuItemSelect ficou assim.

FragmentTransaction FT = getFragmentManager.beginTransaction();
switch(position){
    case 1:
        FT.replace(R.id.fragment_container, new MyFragment()).commit();
        break;
    case 2:
        FT.replace(R.id.fragment_container, new MySecondFragment()).commit();
        break;
}

O código acima funcionou, ele fez o que eu queria sem problemas. Eu realmente não gosto disso, porque para cada fragmento que eu queria adicionar, seria necessário adicionar um novo caso ao switch. Além disso, isso instancia um novo fragmento toda vez, mesmo se ele já tiver sido criado. Isso é um problema?

O maior problema que tive com isso é que não é o mais fácil de escalar. Para 2-3 fragmentos, essa não é a pior maneira de lidar com isso (aos meus olhos). Quero poder ter quantos fragmentos desejar, sem um caso individual para cada um no comutador. Então, o que eu fiz foi criar um fragmentList para armazenar uma única instância de cada um dos meus fragmentos.

List<Fragment> fragmentList;

private void populateFragmentList();{
    fragmentList = new ArrayList<Fragment>();
    fragmentList.add(new HomeFrag());
    fragmentList.add(new BluetoothFragment());
    fragmentList.add(new USBFragment());
    fragmentList.add(new RCInfoFragment());
    fragmentList.add(new ControllerFragment());
    fragmentList.add(new FingerCordsFrag());
}
public void onMenuItemSelect(int position, int curPosition){
    if(fragmentList.get(position).isAdded()){
       getFragmentManager().beginTransaction().show(fragmentList.get(postition))
        .hide(fragmentList.get(curPosition)).commit();
    }
    else
        getFragmentManager().beginTransaction().add(R.id.fragment_container, fragmentList.get(position)).show(fragmentList.get(position)).hide(fragmentList.get(curPosition)).commit();
}

E esse método também funcionou. Eu conseguia exibir todos os meus fragmentos, sem ter que re-instanciar cada fragmento a cada vez. Acredito que isso faça o que estou querendo, ele escala bastante bem (melhor do que um switch / case IMO). O problema que tenho agora é que tudo fica louco quando mudo de orientação. Até agora, eu estava apenas testando o modo retrato, não consigo ver nenhum dos meus fragmentos quando os seleciono em outra orientação. Eu posso iniciá-lo em qualquer orientação e funciona, mas quando eu o altero durante o tempo de execução, só consigo ver o fragmento que eu tinha aberto quando mudei de orientação.

Agora, cada fragmento "onCreateView" está sendo chamado, apenas a exibição não está sendo exibida. Acredito que o tenha limitado a não estar vinculado à nova atividade criada a partir da mudança de orientação. Existe alguma maneira de reconectar fragmentos que já foram criados para uma nova atividade.

Em resumo, as perguntas que tenho são:

Esse modelo é mesmo uma boa maneira para o meu aplicativo?Existe uma maneira decente de lidar com fragmentos que escalam bem? Não consigo encontrar nenhum exemplo.Usar um '' novo MyFragment () '' cada vez que abro uma guia diferente é uma maneira razoável de conseguir isso?Minha maneira de armazenar meus Fragmentos em uma lista é uma maneira razoável de lidar com eles?Como reconectar um fragmento à nova atividade após uma mudança de orientação?

Obrigado pelo seu tempo.

* Tinha que digitar todo esse código em tempo real porque, por algum motivo, não conseguia obter o código C / P'd para formatar corretamente.

questionAnswers(1)

yourAnswerToTheQuestion