TabLayout:切换片段时滞后
TabLayout: Lag when switching fragments
我有 50 个片段,每个片段至少包含 20 个组件。
我在切换选项卡时遇到延迟(滞后),即使我使用了以下语句:
viewpager.setOfscreenPageLimit(2)
但是没用。
我试图用不同线程中的片段初始化 tablayout(除了 UI 线程),如下所示:
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);
但是,我在切换标签时仍然有延迟。
这是我有多少组件的示例:
任何帮助将不胜感激。
不要为此使用 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);
这一定能正常工作。让你的碎片也轻
我有 50 个片段,每个片段至少包含 20 个组件。 我在切换选项卡时遇到延迟(滞后),即使我使用了以下语句:
viewpager.setOfscreenPageLimit(2)
但是没用。 我试图用不同线程中的片段初始化 tablayout(除了 UI 线程),如下所示:
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);
但是,我在切换标签时仍然有延迟。
这是我有多少组件的示例:
任何帮助将不胜感激。
不要为此使用 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);
这一定能正常工作。让你的碎片也轻