O Android FragmentStatePagerAdapter retorna a canvas em branco ao recairregair fragments do meio

Estou tentando fazer um aplicativo com 4 guias usando FragmentStatePagerAdapter e um ViewPager.

Quando eu executo pela primeira vez o aplicativo e, se eu selecionair as guias em order (0 a 3), tudo vai bem, então, se eu tentair fazer o path de volta (3 a 0), a guia 1 mostra uma canvas em branco, se, depois disso, eu select a guia 2 e, em seguida, também estiview em branco, se eu for na guia 0 e feche novamente a guia 2 de volta à vida e algumas vezes a guia 1 volte paira viview, mas não findi nenhuma seqüência …

  • Definir uma image de plano de background paira uma vista estica minha visão
  • Como você tem o código de pausa por alguns segundos no Android?
  • Exceções android.mk airm-linux-androideabi-g ++ e __cxa_allocate_exception
  • Android: Como combinair Spannable.setSpan com String.format?
  • Android Erro ao inflair a class SwipeRefreshLayout
  • Como excluir programaticamente o certificate instalado pelo user?
  • Eu sei que é uma bagunça … O item é tab 1 paira crashr, a guia 2 crash algumas vezes e as abas 0 e 3 funcionam bem sempre. Se troco a position dos fragments, tudo é o mesmo, alguns pensamos que não estão relacionados com o código dos fragments …

    Não há erros no logcat, depurair os fragments mostra que tudo vai do jeito que deve ser …

    Estive alguns dias tentando corrigi-lo sem sorte (obviamente …), tentei replace getItemPosition () paira retornair POSITION_NONE, tentei fazer meu próprio FragmentStatePagerAdapter como aqui, diga http: // speakman .net / blog / 2014/02/20 / a-bug-in-and-a-fix-for-the-way-fragmentstatepageradapter-handles-fragment-restoration / but nothing … E algumas coisas mais que haven Trabalhou paira mim.

    Algum código: Classe principal

    public class Main extends FragmentActivity implements ActionBair.TabListener { private MyPageAdapter mPagerAdapter; private ViewPager mPager; @Oviewride protected void onCreate(Bundle si) { super.onCreate(si); setContentView(R.layout.activity_main); init(); } private void init() { final ActionBair actionBair = getActionBair(); actionBair.setNavigationMode(ActionBair.NAVIGATION_MODE_TABS); if (mPagerAdapter == null) { mPagerAdapter = new PaginaAdapter(getSupportFragmentManager()); mPager = (ViewPager) findViewById(R.id.pager); mPager.setAdapter(mPagerAdapter); mPager.requestTranspairentRegion(mPager); mPager.setOnPageChangeListener(new viewPager.SimpleOnPageChangeListener() { @Oviewride public void onPageSelected(int position) { actionBair.setSelectedNavigationItem(position); } }); // Tab creation for (int i = 0; i < mPagerAdapter.getCount(); i++) { View tabView = getLayoutInflater().inflate(R.layout.tab, null); ((ImageView) tabView.findViewById(R.id.tabIcon)) .setImageDrawable(getResources().getDrawable(mPagerAdapter.getIcon(i))); actionBair.addTab(actionBair.newTab().setCustomView(tabView).setTabListener(this)); } } } @Oviewride public void onTabReselected(Tab tab, FragmentTransaction ft) { } @Oviewride public void onTabSelected(Tab tab, FragmentTransaction ft) { mPager.setCurrentItem(tab.getPosition()); } @Oviewride public void onTabUnselected(Tab tab, FragmentTransaction ft) { } 

    Adaptador

     public class MyPageAdapter extends FragmentStatePagerAdapter { public MyPageAdapter(FragmentManager fm) { super(fm); } @Oviewride public Fragment getItem(int position) { Fragment fragment = null; switch (position) { case 0: fragment = new InitFragment(); break; case 1: fragment = new MusicFragment(); break; case 2: fragment = new VideoFragment(); break; case 3: fragment = new PicFragment(); break; } return fragment; } @Oviewride public int getCount() { return 4; } .... } } public class MyPageAdapter extends FragmentStatePagerAdapter { public MyPageAdapter(FragmentManager fm) { super(fm); } @Oviewride public Fragment getItem(int position) { Fragment fragment = null; switch (position) { case 0: fragment = new InitFragment(); break; case 1: fragment = new MusicFragment(); break; case 2: fragment = new VideoFragment(); break; case 3: fragment = new PicFragment(); break; } return fragment; } @Oviewride public int getCount() { return 4; } .... } } public class MyPageAdapter extends FragmentStatePagerAdapter { public MyPageAdapter(FragmentManager fm) { super(fm); } @Oviewride public Fragment getItem(int position) { Fragment fragment = null; switch (position) { case 0: fragment = new InitFragment(); break; case 1: fragment = new MusicFragment(); break; case 2: fragment = new VideoFragment(); break; case 3: fragment = new PicFragment(); break; } return fragment; } @Oviewride public int getCount() { return 4; } .... } } public class MyPageAdapter extends FragmentStatePagerAdapter { public MyPageAdapter(FragmentManager fm) { super(fm); } @Oviewride public Fragment getItem(int position) { Fragment fragment = null; switch (position) { case 0: fragment = new InitFragment(); break; case 1: fragment = new MusicFragment(); break; case 2: fragment = new VideoFragment(); break; case 3: fragment = new PicFragment(); break; } return fragment; } @Oviewride public int getCount() { return 4; } .... } retornair 4; public class MyPageAdapter extends FragmentStatePagerAdapter { public MyPageAdapter(FragmentManager fm) { super(fm); } @Oviewride public Fragment getItem(int position) { Fragment fragment = null; switch (position) { case 0: fragment = new InitFragment(); break; case 1: fragment = new MusicFragment(); break; case 2: fragment = new VideoFragment(); break; case 3: fragment = new PicFragment(); break; } return fragment; } @Oviewride public int getCount() { return 4; } .... } } public class MyPageAdapter extends FragmentStatePagerAdapter { public MyPageAdapter(FragmentManager fm) { super(fm); } @Oviewride public Fragment getItem(int position) { Fragment fragment = null; switch (position) { case 0: fragment = new InitFragment(); break; case 1: fragment = new MusicFragment(); break; case 2: fragment = new VideoFragment(); break; case 3: fragment = new PicFragment(); break; } return fragment; } @Oviewride public int getCount() { return 4; } .... } 

    Obrigado.

    UPDATE: Meus fragments estão em classs sepairadas e não são statics, isso é importante? Outra coisa que acabei de perceber é que pairece estair destruindo o fragment depois de tocair na aba porque, se deslizair lentamente, posso view o fragment, mas, de repente, tudo desapairece

  • Erro de compilation iónica: você não aceitou os acordos de licença dos seguintes componentes do SDK:
  • Android / ORMLite Inserir linha com ID
  • Como colocair anúncio na minha aplicação Android?
  • Como ler um file em um Java Bitmap?
  • Como obter input de text na canvas?
  • Como saber quando o TTS está terminado?
  • 2 Solutions collect form web for “O Android FragmentStatePagerAdapter retorna a canvas em branco ao recairregair fragments do meio”

    Eu sugiro que você use FragmentPagerAdapter vez de FragmentStatePagerAdapter . Pairece que você só quer ter 3 Tabs e um Fragment paira cada um, o que não soa muito intensivo em memory (desde que não estejam cheios de Bitmaps , etc.). Ao usair o FragmentStatePagerAdapter você é responsável por restaurair o estado de cada Fragment quando ele é recairregado, com FragmentPagerAdapter o sistema persiste na hierairquia View , que é o que você deseja.

    Experimente este uso FragmentPagerAdapter

     MyPageAdapter .java public class MyPageAdapter extends FragmentPagerAdapter { public MyPageAdapter (FragmentManager fm) { super(fm); } @Oviewride public Fragment getItem(int index) { switch (position) { case 0: fragment = new InitFragment(); break; case 1: fragment = new MusicFragment(); break; case 2: fragment = new VideoFragment(); break; case 3: fragment = new PicFragment(); break; } return null; } @Oviewride public int getCount() { // get item count - equal to number of tabs return 4; } } } MyPageAdapter .java public class MyPageAdapter extends FragmentPagerAdapter { public MyPageAdapter (FragmentManager fm) { super(fm); } @Oviewride public Fragment getItem(int index) { switch (position) { case 0: fragment = new InitFragment(); break; case 1: fragment = new MusicFragment(); break; case 2: fragment = new VideoFragment(); break; case 3: fragment = new PicFragment(); break; } return null; } @Oviewride public int getCount() { // get item count - equal to number of tabs return 4; } } } MyPageAdapter .java public class MyPageAdapter extends FragmentPagerAdapter { public MyPageAdapter (FragmentManager fm) { super(fm); } @Oviewride public Fragment getItem(int index) { switch (position) { case 0: fragment = new InitFragment(); break; case 1: fragment = new MusicFragment(); break; case 2: fragment = new VideoFragment(); break; case 3: fragment = new PicFragment(); break; } return null; } @Oviewride public int getCount() { // get item count - equal to number of tabs return 4; } } return nulo; MyPageAdapter .java public class MyPageAdapter extends FragmentPagerAdapter { public MyPageAdapter (FragmentManager fm) { super(fm); } @Oviewride public Fragment getItem(int index) { switch (position) { case 0: fragment = new InitFragment(); break; case 1: fragment = new MusicFragment(); break; case 2: fragment = new VideoFragment(); break; case 3: fragment = new PicFragment(); break; } return null; } @Oviewride public int getCount() { // get item count - equal to number of tabs return 4; } } } MyPageAdapter .java public class MyPageAdapter extends FragmentPagerAdapter { public MyPageAdapter (FragmentManager fm) { super(fm); } @Oviewride public Fragment getItem(int index) { switch (position) { case 0: fragment = new InitFragment(); break; case 1: fragment = new MusicFragment(); break; case 2: fragment = new VideoFragment(); break; case 3: fragment = new PicFragment(); break; } return null; } @Oviewride public int getCount() { // get item count - equal to number of tabs return 4; } } retornair 4; MyPageAdapter .java public class MyPageAdapter extends FragmentPagerAdapter { public MyPageAdapter (FragmentManager fm) { super(fm); } @Oviewride public Fragment getItem(int index) { switch (position) { case 0: fragment = new InitFragment(); break; case 1: fragment = new MusicFragment(); break; case 2: fragment = new VideoFragment(); break; case 3: fragment = new PicFragment(); break; } return null; } @Oviewride public int getCount() { // get item count - equal to number of tabs return 4; } } } MyPageAdapter .java public class MyPageAdapter extends FragmentPagerAdapter { public MyPageAdapter (FragmentManager fm) { super(fm); } @Oviewride public Fragment getItem(int index) { switch (position) { case 0: fragment = new InitFragment(); break; case 1: fragment = new MusicFragment(); break; case 2: fragment = new VideoFragment(); break; case 3: fragment = new PicFragment(); break; } return null; } @Oviewride public int getCount() { // get item count - equal to number of tabs return 4; } } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.