阻止FragmentView加载RecyclerView直到它聚焦?

时间:2015-12-11 10:34:43

标签: android tabs

我的应用中有一个简单的if bool(expression)和3个标签。所有3个选项卡都有FragmentView,问题是前两个选项卡并不复杂,而第三个选项卡使用一些复杂的操作并减慢应用程序的速度,使其在执行这些操作时滞后。我的问题是:我如何阻止RecyclerView致电FragmentView直到它专注? 现在,当第二个选项卡聚焦时,第三个选项卡开始执行这些操作。我希望它在第三个选项卡聚焦时开始执行这些方法。 这是我的代码:

onCreateView

这是我的适配器:

tabLayout = (TabLayout) findViewById(R.id.tab_layout);
        tabLayout.addTab(tabLayout.newTab().setText("Tab1"));
        tabLayout.addTab(tabLayout.newTab().setText("Tab2"));
        tabLayout.addTab(tabLayout.newTab().setText("Tab3"));
        tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);

        viewPager = (ViewPager) findViewById(R.id.pager);
        adapter = new PagerAdapter
                (getSupportFragmentManager(), tabLayout.getTabCount());
        viewPager.setAdapter(adapter);
        viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
        tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());

            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });

和标签:

public class PagerAdapter extends FragmentStatePagerAdapter  {
    int mNumOfTabs;

    public PagerAdapter(FragmentManager fm, int NumOfTabs) {
        super(fm);
        this.mNumOfTabs = NumOfTabs;
    }

    @Override
    public Fragment getItem(int position) {

        switch (position) {
            case 0:
                RingtonesActivityFragment Ringtones = new RingtonesActivityFragment();
                return Ringtones;
            case 1:
                FavoritesActivityFragment Favorites = new FavoritesActivityFragment();
                return Favorites;
            case 2:
                MySongsActivityFragment Songs = new MySongsActivityFragment();
                return Songs;
            default:
                return null;
        }
    }

    @Override
    public int getCount() {
        return mNumOfTabs;
    }
}

1 个答案:

答案 0 :(得分:0)

默认情况下,

ViewPager会将1页加载到当前页面的任意一侧。即使您将setOffscreenPageLimit设置为小于1,它也会将自身重置为1.除非您根据自己的喜好修改ViewPager类,否则无法解决此问题。

为了帮助延迟执行代码,您可以使用ViewPager.OnPageChangeListener及其方法onPageSelected(int position)来找出当前关注的标签。然后,您可以在Fragment成为焦点后推迟所需的工作。

我还要补充一点,如果您正在进行导致UI延迟的工作,您可能需要考虑将工作转移到后台线程。如果工作与布局相关,而您无法在后台线程上使用层次结构查看器或Systrace来帮助您进行优化。