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, но у меня возникли проблемы с использованием его в программе

Другие вопросы по тегам