TabLayout:切换片段时滞后

问题描述 投票:0回答:1

我有50个碎片,每个碎片至少有20个组件。我在切换标签时遇到延迟(滞后),即使我已经使用过这个语句:

viewpager.setOfscreenPageLimit(2)

但它不起作用。我尝试使用不同线程(除了UI线程)中的片段初始化tablayout,如下所示:

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);

但是,切换标签时我仍然有一个滞后。

这是我有多少组件的示例:

enter image description here

任何帮助将不胜感激。

java android android-viewpager android-tablayout lag
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);

这必须没有故障。保持你的碎片光

© www.soinside.com 2019 - 2024. All rights reserved.