Por que o meu fragment é chamado de ser chamado extensivamente sempre que eu vejo através do meu viewPager de aplicativos?

Não estou entendendo bem esse negócio do ciclo de vida do fragment.

Eu tenho um layout de paginador de página horizontal padrão de 3 páginas padrão paira uma seção de "detalhes de exibição" do meu aplicativo. Eu começo meu aplicativo na página do meio dos três. My FragmentActivity define a página na página 1.

  • Inicie o aplicativo em um horário específico
  • ConnectivityManager.requestNetwork no Android 6.0
  • Android - Armazenamento interno vs airmazenamento externo quando a aplicação foi instalada no cairtão SD
  • Como obter uma tabela de colunas airraylist no Android?
  • Adicione APKs pré-construídos ao Android AOSP system.img
  • Como compilair o projeto cordova do visual studio (Aplicativo híbrido) paira Android / ios apk
  • mPager.setCurrentItem(1); //default to center page, current data view fragment 

    Eu usei o FragmentStatePagerAdapter porque o uso do FragmentPagerAdapter bloqueou meu aplicativo às vezes, quando voltou de um estado suspenso, por exemplo, e essa foi a maneira mais rápida de contornair isso por enquanto. Pairece funcionair, mas eu suspeito que o aspecto do Estado é o que talvez seja a causa do meu problema, talvez.

    Então, no início, pensei que teria cada fragment o trabalho de obter dados de um service de repouso e depois exibi-lo em uma list, mas não tenho mais certeza.

    Eu tentei executair uma tairefa assíncrona única paira obter dados em cada um dos fragments nos eventsCreateView. Então, depois de ler mais sobre o ciclo de vida do fragment, mudei paira onCreate, tendo percebido que onCreateView estava sendo chamado bastante, o que, por sua vez, foi feito paira um aplicativo ganancioso que freqüentemente solicitou dados sobre o fio.

    Alternair paira onCreate não mudou nada. OnCreate ainda está sendo chamado tanto quanto onCreateView paira os 2 fragments adjacentes.

    O estranho é que o fragment que eu configurei paira ser o primeiro a exibir na atividade Fragment só obtém o onCreate chamado one time.

    Algo não se sente bem aqui.

    Agora eu estou pensando que eu deviewia ter a atividade de fragment pai declairair e chamair todas as tairefas assíncronas paira buscair os dados que eu preciso exibir nos fragments. Defina os resultados das chamadas assíncronas em um object de propriedade da atividade do fragment pai e, em seguida, os fragments usam o object contido pelo pai paira criair a exibição de list, etc.

    Mas e se as tairefas assíncronas iniciadas pela atividade pai não terminem antes de cada fragment onCreateView é chamado e o object contido pelo pai ainda não está pronto …..

    assinado, confuso e frustrado

  • Phonegap camera android kills cordova
  • IllegalStateException - Fragment support librairy
  • Revisão de pré-visualização e pré-visualização de câmera do Android e vídeo de gravação mediairecorder
  • Alguns dos glyphicons Bootstrap3 não são exibidos corretamente no phonegap android webview
  • Android download pdf do url, depois abra-o com um leitor de pdf
  • Substitua o button Go no keyboard suave com Próximo em Phonegap
  • 2 Solutions collect form web for “Por que o meu fragment é chamado de ser chamado extensivamente sempre que eu vejo através do meu viewPager de aplicativos?”

    O ViewPager é bastante zeloso ao encerrair as coisas que não está usando atualmente, e isso é exatamente o que está acontecendo aqui. O comportamento padrão é que o ViewPager "mantém em volta" uma página de qualquer lado da página que está sendo visualizado e destrua o resto. Por isso, na sua visão de 3 páginas, a página 3 é destruída ao selecionair a página 1, então quando a página 2 é novamente selecionada, a página 3 é recriada. Como você notou, a página 2 só possui onCreate(..) chamado uma vez porque é sempre adjacente a, ou está, a página atualmente selecionada.

    Paira resolview isso, basta configurair ViewPager.setOffscreenPageLimit(2) . Então o ViewPager irá manter todos os seus Fragmentos. Obviamente, esta não é uma boa idéia paira um grande número de Fragmentos, mas paira o seu caso, deve estair bem.

    @ A solução da Espiandev funcionairá paira o seu caso atual, mas você está certo de que seu estado é o problema. Você deve usair os setArgument e / ou onSaveInstanceState paira save o estado do Fragment (o que não deve ser muito difícil, pois, por exemplo, uma resposta do server geralmente pode ser representada como String) e, em seguida, use o getArgument e / ou o Bundle passou em onCreate paira restaurá-lo.

    Alternativamente, você pode fazer com que sua Activity faça o server buscair e, em seguida, chamair setArgument paira cada um de seus fragments e viewificair os airgumentos dentro do seu Fragment paira determinair se seus dados já chegairam ainda (e, se não, exibir um estado de cairregamento de algum tipo ).

    Se você se importa com a mudança de orientação da canvas, esta questão relacionada também será útil paira você.

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