简体   繁体   English

TabLayout:切换片段时滞后

[英]TabLayout: Lag when switching fragments

I have 50 fragments with at least 20 components in each one. 我有50个片段,每个片段至少包含20个组件。 I'm experiencing a delay (lag) when switching tabs, even though I've used this statement: 即使我使用了以下语句,在切换选项卡时也遇到了延迟(延迟):

viewpager.setOfscreenPageLimit(2)

but it didn't work. 但这没用。 I tried to initialize the tablayout with the fragments in a different thread (apart from the UI thread), like this: 我试图用另一个线程(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);

But, I still had a lag when switching tabs. 但是,切换标签时我仍然滞后。

This is an example of how many components I have: 这是我有多少个组件的示例:

在此处输入图片说明

Any help will be appreciated. 任何帮助将不胜感激。

Don't use Handler for this one. 不要为此使用Handler。 You really don't need to set up a delay for this 您真的不需要为此设置延迟

Use this as your ViewPagerAdapter (Which is just a standard ViewPager Adapter Structure): 将此用作您的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); } } 

And for setting Adapter Use something like This: 对于设置适配器,请使用以下命令:

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

This must work without a glitch. 这必须毫无故障地工作。 Keep your Fragments Light as well 保持碎片轻巧

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM