2017-01-05 3 views
2

Изначально фрагмент возвращает соответствующий список списка первой и второй вкладки. Но возвращает пустой фрагмент для третьей вкладки. Когда я выбираю первую вкладку, снова появляется пустой фрагмент. Нет проблем с listadapter . Когда я устанавливаю адаптер на второй вкладке, он работает нормально. Проблема с Mainactivity и фрагментФрагмент пуст при переустановке вкладки

Mainactivity

public class SwipemainActivity extends AppCompatActivity 
    implements NavigationView.OnNavigationItemSelectedListener 
{ 
private TextView displayTextView; 
public static SwipemainActivity instance; 

TabLayout tabLayout; 
ViewPager viewPager; 
Context context; 
FragmentAdapterClass fragmentAdapter; 

public static Context getInstance() { 
    return instance; 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_swipemain); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    instance = this; 

    tabLayout = (TabLayout) findViewById(R.id.tabs); 
    viewPager = (ViewPager) findViewById(R.id.viewpager); 

    setSupportActionBar(toolbar); 

    tabLayout.addTab(tabLayout.newTab().setText("NEW")); 
    tabLayout.addTab(tabLayout.newTab().setText("CONFIRMED")); 
    tabLayout.addTab(tabLayout.newTab().setText("FINISHED")); 

    fragmentAdapter = new FragmentAdapterClass(getSupportFragmentManager(), tabLayout.getTabCount()); 

    viewPager.setAdapter(fragmentAdapter); 

    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 

    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
     @Override 
     public void onTabSelected(TabLayout.Tab LayoutTab) { 

      viewPager.setCurrentItem(LayoutTab.getPosition()); 
     } 


     @Override 
     public void onTabUnselected(TabLayout.Tab LayoutTab) { 

     } 

     @Override 
     public void onTabReselected(TabLayout.Tab LayoutTab) { 

     } 
    }); 
} 
    } 

Фрагмент

public class FragmentAdapterClass extends FragmentStatePagerAdapter { 

int TabCount; 

public FragmentAdapterClass(FragmentManager fragmentManager, int CountTabs) { 
    super(fragmentManager); 

    this.TabCount = CountTabs; 

} 

@Override 
public Fragment getItem(int position) { 

    switch (position) { 

     case 0: 
      Tab1 tab1 = new Tab1(); 
      return tab1; 

     case 1: 
      Tab2 tab2 = new Tab2(); 
      return tab2; 

     case 2: 
      Tab3 tab3 = new Tab3(); 
      return tab3; 

     default: 

     return null; 
    } 
} 

@Override 
public int getCount() { 
    return TabCount; 
} 

} 
+0

Добавить 'viewPager.setOffscreenPageLimit (3)' в 'SwipeMainActivity' –

+0

спасибо Mayur Раваль. Прекрасно работает. – Ana

ответ

3

Я никогда не использовать этот приемник для изменения фрагмента ViewPager. И используйте setOffScreenPageLimit, чтобы сообщить viewpager, сколько фрагментов необходимо сохранить в памяти. Так я всегда настраивал свои фрагменты с помощью tabbedlayout и viewpager.

viewPager.setOffscreenPageLimit(AMOUNT_OF_FRAGMENTS); 
Смежные вопросы