FragmentPagerAdapter getItem não está sendo ativado

Atualmente, com um FragmentActivity , alterno entre 2 types de Fragmentos usando o seguinte código.

 private void toggle() { Fragment oldFragment = getSupportFragmentManager().findFragmentById(R.id.content); Fragment fragment = null; if (oldFragment instanceof ColorFragment) { fragment = new ViewPagerFragment(); } else { fragment = new ColorFragment(android.R.color.black); } getSupportFragmentManager().beginTransaction().replace(R.id.content, fragment).commitAllowingStateLoss(); } } private void toggle() { Fragment oldFragment = getSupportFragmentManager().findFragmentById(R.id.content); Fragment fragment = null; if (oldFragment instanceof ColorFragment) { fragment = new ViewPagerFragment(); } else { fragment = new ColorFragment(android.R.color.black); } getSupportFragmentManager().beginTransaction().replace(R.id.content, fragment).commitAllowingStateLoss(); } 

2 Fragmentos estão sendo alternados.

  • Como reproduzir os files de audio diretamente da pasta res / raw?
  • Como obter headers fixos / fixos em um ExpandableListView?
  • Como pairair de alterair a orientação quando uma bairra de progresso está girando no Android
  • CollapsingToolbairLayout setTitle () não atualiza a less que colapsado
  • Renderizair um file PDF usando Java no Android
  • Pesquisair no mercado de reprodução com o nome da aplicação localizada
    • ColorFragment – Um fragment simples que enche seu background com cor preta sólida.
    • ViewPagerFragment – Um fragment contém ViewPager . O user pode deslizair entre um fragment de cor roxa e um fragment de cor azul.

    O código responsável por deslizair os fragments de cor roxa e azul é o seguinte.

     private static class MyFragmentPagerAdapter extends FragmentPagerAdapter { public MyFragmentPagerAdapter(FragmentManager fm) { super(fm); } @Oviewride public int getCount() { return 2; } @Oviewride public Fragment getItem(int position) { switch (position) { case 0: return new ColorFragment(android.R.color.holo_purple); default: return new ColorFragment(android.R.color.holo_blue_bright); } } } } private static class MyFragmentPagerAdapter extends FragmentPagerAdapter { public MyFragmentPagerAdapter(FragmentManager fm) { super(fm); } @Oviewride public int getCount() { return 2; } @Oviewride public Fragment getItem(int position) { switch (position) { case 0: return new ColorFragment(android.R.color.holo_purple); default: return new ColorFragment(android.R.color.holo_blue_bright); } } } return 2; private static class MyFragmentPagerAdapter extends FragmentPagerAdapter { public MyFragmentPagerAdapter(FragmentManager fm) { super(fm); } @Oviewride public int getCount() { return 2; } @Oviewride public Fragment getItem(int position) { switch (position) { case 0: return new ColorFragment(android.R.color.holo_purple); default: return new ColorFragment(android.R.color.holo_blue_bright); } } } } private static class MyFragmentPagerAdapter extends FragmentPagerAdapter { public MyFragmentPagerAdapter(FragmentManager fm) { super(fm); } @Oviewride public int getCount() { return 2; } @Oviewride public Fragment getItem(int position) { switch (position) { case 0: return new ColorFragment(android.R.color.holo_purple); default: return new ColorFragment(android.R.color.holo_blue_bright); } } } } private static class MyFragmentPagerAdapter extends FragmentPagerAdapter { public MyFragmentPagerAdapter(FragmentManager fm) { super(fm); } @Oviewride public int getCount() { return 2; } @Oviewride public Fragment getItem(int position) { switch (position) { case 0: return new ColorFragment(android.R.color.holo_purple); default: return new ColorFragment(android.R.color.holo_blue_bright); } } } } private static class MyFragmentPagerAdapter extends FragmentPagerAdapter { public MyFragmentPagerAdapter(FragmentManager fm) { super(fm); } @Oviewride public int getCount() { return 2; } @Oviewride public Fragment getItem(int position) { switch (position) { case 0: return new ColorFragment(android.R.color.holo_purple); default: return new ColorFragment(android.R.color.holo_blue_bright); } } } 

    No entanto, encontro o comportamento estranho durante a mudança.

    1. Foi mostrado fragment de cor preta.
    2. Alternair.
    3. Ver pager, que pode deslizair entre fragments roxo e azul mostrados.
    4. Alternair.
    5. Foi mostrado fragment de cor preta.
    6. Alternair.
    7. Nada mostrado, já que o getItem do MyFragmentPagerAdapter não está sendo ativado.

    Eu acho que minha situação é semelhante ao FragmentPagerAdapter getItem não é chamado

    No entanto, eu prefiro não usair o FragmentStatePagerAdapter , devido ao custo de mais despesas gerais ao mudair de páginas.

    Alguma solução paira superair este problema?

    Inclui um código-fonte completo e viável paira demonstrair esse problema: https://www.dropbox.com/s/jok9tz5ktvfcteo/viewpagerbug.zip

  • Editair text no ListActivity ListView perde o foco quando o keyboard apairece
  • Feche o keyboard virtual no button pressione
  • O Android obtém lairgura total paira a checkbox de dialog personalizada
  • Como usair atividades não-principais paira capturair url personalizado no jogo de unidade?
  • Android 5.0 - Adicionair header / rodapé a um RecyclerView
  • Dispositivo Android não reconhecido pelo adb
  • 5 Solutions collect form web for “FragmentPagerAdapter getItem não está sendo ativado”

    Alguma solução paira superair este problema?

    Eu baixei seu código e o problema apairece porque você não lida com esses Fragments . Mais precisamente, você usa Fragments nesteds no Fragments baseado no ViewPager e paira esse ViewPager você cria o adaptador como este:

     MyFragmentPagerAdapter myFragmentPagerAdapter = new MyFragmentPagerAdapter(this.getFragmentManager()); 

    Em vez disso, você deve estair usando getChildFragmentManager() paira vinculair os fragments nesteds:

     MyFragmentPagerAdapter myFragmentPagerAdapter = new MyFragmentPagerAdapter(this.getChildFragmentManager()); 

    Além disso, você não deve passair dados através de um construtor paira um Fragment pois esses dados não sobreviviewão a uma mudança de configuration e as coisas ruins começairão a apairecer. Use um Bundle vez disso.

    Solução global testada em funcionamento.

    getSupportFragmentManager() mantém a reference nula algumas vezes e View pager não cria nova instância de fragment. Uma vez que ele encontra reference ao mesmo fragment. Então, paira mais, venha isso usair getChildFragmentManager() resolve o problema de maneira simples.

    Não faça

    new PagerAdapter(getSupportFragmentManager(), fragments);

    Faz

    new PagerAdapter(getChildFragmentManager() , fragments);

    No meu caso, eu estava chamando corretamente

     MyFragmentPagerAdapter myFragmentPagerAdapter = new MyFragmentPagerAdapter(this.getChildFragmentManager()); 

    mas então no fragment nested eu estava tentando replace o fragment de contêiner por outro usando:

     getFragmentManager() 

    Você precisa ir paira a atividade e ligair paira

     getActivity().getSupportFragmentManager(); 

    Nos meus casos, funcionou depois de adicionair isso ao meu FragmentPagerAdapter :

      @Oviewride public int getItemPosition(Object object) { return POSITION_NONE; } 

    e eu também usei getChildFragmentManager () como Luksprog disse

    Uso simples FragmentStatePagerAdapter vez de FragmentPagerAdapter

    ou

    você pode usair o new MyFragmentPagerAdapter(this.getChildFragmentManager())

    Espero que ajude você 🙂

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