Android в TabLayout, фрагменты ViewPager не обновляются постоянно
У меня есть TabLayout и ViewPager в моем приложении для Android. Но когда я использую пролистывание для изменения "Tab1" на "Tab2" и нажимаю на "Tab1", чтобы вернуться к первой вкладке, фрагмент внутри моего viewpager не обновляется.
Подобная проблема существует, если я использую пролистывание, чтобы перейти от "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);
3 ответа
Вы должны реализовать setOnTabSelectedListener
:
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
viewPager.setCurrentItem(tab.getPosition());
}
});
Уже поздно, но я нашел лучший выход, используя FragmentPagerAdapter
Сначала во всех фрагментах, используемых в методе создания viewpager, как показано ниже.
public void updateView () { // Обновляем любые представления или данные, которые вы хотите обновить }
Также переопределите метод setUserVisibleHint, который используется в FragmentPagerAdapter, чтобы уведомить, является ли фрагмент видимым для пользователя или нет.
@Override public void setUserVisibleHint (логическое значение isVisibleToUser) { this.isVisibleToUser = isVisibleToUser; super.setUserVisibleHint(isVisibleToUser); }
наконец, в ваш фрагмент добавьте следующий код, чтобы обновить вид / дату, когда фрагмент виден.
@Override public void onStart () { if (isVisibleToUser) updateView(); }
Затем реализуйте это в вашем TabFragment или Activity
viewpager.addOnPageChangeListener (new ViewPager.OnPageChangeListener () { @Override public void onPageScrolled (int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected (int position) { переключатель (положение) { случай 0: { ((Fragment) mFragmentList.get(0)). UpdateView(); перерыв; } Случай 1: { ((Fragment) mFragmentList.get(1)). UpdateView(); перерыв; } } }
Это обеспечит постоянное обновление данных, либо вы проводите пальцем, либо щелкаете по вкладке, она хорошо проверена, если кто-то обнаружит какие-либо проблемы или ошибки, пожалуйста, прокомментируйте и дайте мне знать или не стесняйтесь редактировать решение.
Попробуй это
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, но у меня возникли проблемы с использованием его в программе