2015-08-31 2 views
2

У меня есть TabLayout и ViewPager в моем приложении для Android. Но когда я использую swipe для изменения «Tab1» на «Tab2» и используйте «Tab1», чтобы вернуться к первой вкладке, тогда фрагмент внутри моего viewpager не обновляется.Android в TabLayout, ViewPager Фрагменты не обновляются постоянно

Аналогичная проблема существует, если я использую swipe для перехода от «Tab2» в «Tab3», а затем попытаюсь щелкнуть по вкладке, чтобы вернуться к Tab2.

В противном случае TabLayout отлично работает, все вкладки будут обновлены, и будут показаны соответствующие фрагменты, если я использую любую комбинацию щелчков или кликов.

 //set tabs and viewpager 
    ViewPager viewPager = (ViewPager) findViewById(R.id.mViewPager); 
    viewPager.setAdapter(new MyFragmentPageAdapter(getSupportFragmentManager(), MainActivity.this)); 

    //layout 
    TabLayout tabLayout= (TabLayout) findViewById(R.id.mTabs); 
    tabLayout.setupWithViewPager(viewPager); 

ответ

2

Вы должны осуществлять setOnTabSelectedListener:

tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
     @Override 
      viewPager.setCurrentItem(tab.getPosition()); 
     } 
}); 
+0

@ DanielNugent У вас есть пример или сайт, показывающий правильный способ реализации этого, поскольку я сталкиваюсь с тем же? –

+0

@clumsy взгляните на мой ответ здесь: http://stackoverflow.com/questions/36503779/refresh-data-in-viewpager-fragment –

0

попробовать этот

mViewPager.setOffscreenPageLimit(2); // if you use 3 tabs 
mViewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 
      @Override 
      public void onPageSelected(int position) { 
       mTabLayout.getTabAt(position).select(); 
      } 
}); 

смотреть с mViewPager.setOffscreenPageLimit(2); значения по умолчанию является 1, но у меня были некоторые проблемы с использованием его с recyclerview

2

Поздно, но я нашел лучший выход с помощью FragmentPag erAdapter

Прежде всего во всех фрагментах, используемых в методе viewpager, как показано ниже.

 
public void updateView() { 
    //Update whatever views or data you want to update 
} 

переопределить метод также setUserVisibleHint, который используется в FragmentPagerAdapter, чтобы уведомить, если фрагмент виден пользователю или нет.

 
@Override 
    public void setUserVisibleHint(boolean isVisibleToUser) { 
     this.isVisibleToUser = isVisibleToUser; 
     super.setUserVisibleHint(isVisibleToUser); 
    } 

Наконец, в вашем фрагменте добавьте следующий код, чтобы обновить представление/дату, когда фрагмент будет виден.

 
@Override 
    public void onStart() { 
      if (isVisibleToUser) 
       updateView(); 
    } 

Затем осуществить это в TabFragment или активность

 
viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
      @Override 
      public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

      } 

      @Override 
      public void onPageSelected(int position) { 

       switch (position) { 
        case 0: { 
         ((Fragment) mFragmentList.get(0)).updateView(); 
         break; 
        } 
        case 1: { 
         ((Fragment) mFragmentList.get(1)).updateView(); 
         break; 
        } 
       } 
      } 

Это будет заботиться о обновлении данных последова- либо красть или нажмите на вкладку, его хорошо испытанный, если кто-то находит какие-либо вопросы, или ошибки, прокомментируйте и дайте мне знать или не стесняйтесь редактировать решение.

Смежные вопросы