TabLayout: Лаги при переключении фрагментов

У меня есть 50 фрагментов, в каждом из которых не менее 20 компонентов. Я испытываю задержку (отставание) при переключении вкладок, хотя я использовал это утверждение:

viewpager.setOfscreenPageLimit(2)

но это не сработало. Я попытался инициализировать вкладку с фрагментами в другом потоке (кроме потока пользовательского интерфейса), например так:

new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {

                        PagerAdapter adapter = new PagerAdapter(getSupportFragmentManager());

                        // Add Fragments  
                        // Here there are 50 fragments, but I added just 2 
                        //fragments for simplicity

                        //region Phase Five
                        adapter.addFragment(new PhaseFiveTestTwoFragment(), "");

                        adapter.addFragment(new LessonOneFragment(), "");
                        //endregion

                        viewPager.setOffscreenPageLimit(2);

                        viewPager.setAdapter(adapter);

                        tabLayout.setupWithViewPager(viewPager);

                    }
                }, 100);

Но у меня все еще было отставание при переключении вкладок.

Это пример того, сколько компонентов у меня есть:

TabLayout: Лаги при переключении фрагментов

Любая помощь будет оценена.

Используйте трассировка метода и определите, в чем именно заключается ваша проблема.

CommonsWare 30.03.2019 15:01
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
561
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Не используйте Handler для этого. Вам действительно не нужно настраивать задержку для этого

Используйте это как свой ViewPagerAdapter (это просто стандартная структура адаптера ViewPager):

private class ViewPagerAdapter extends FragmentPagerAdapter {
  private final List < Fragment > mFragList = new ArrayList < > ();



  public ViewPagerAdapter(FragmentManager fm) {
    super(fm);
  }

  @Override
  public Fragment getItem(int position) {
    return mFragList.get(position);
  }

  @Override
  public int getCount() {
    return mFragList.size();
  }

  public void addFragmentI(Fragment fragment) {
    mFragList.add(fragment);
  }
  private void removeFragmentI(Collection < Fragment > fragment) {
    mFragList.removeAll(fragment);
  }
}

А для настройки адаптера используйте что-то вроде этого:

Fragment[] frags = {
  new Fragment1(),
  new Fragment2(),
  new Fragment3(),
  new Fragment4(),
  new Fragment5()
};
for (int i = 0; i < tabCount; i++) {
  pagerAdapter.addFragmentI(frags[i]);
}
mViewPager.setAdapter(pagerAdapter);
mTabLayout.setupWithViewPager(mViewPager);

mTabLayout.setTabGravity(TabLayout.GRAVITY_CENTER);
mTabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);

Это должно работать без сбоев. Держите свои фрагменты также легкими

Я реализовал ваше решение в первую очередь, но оно не сработало.

Mohammad Sommakia 30.03.2019 15:27

хорошо, так что убедитесь, что проблема в вашем макете. Например, что вы используете для градиента в элементе «Фон»?

Shahin 30.03.2019 15:30

потому что Textviews в порядке, однако вы их используете. Вы можете загрузить свой товар xml?

Shahin 30.03.2019 15:31

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