繁体   English   中英

滚动时ViewPager问题

[英]ViewPager Issue while Scrolling

当我将viewpager从tab0滚动到tab1时,tab1会正确显示,但会碰到tab2 Web服务。 显示tab2时类似,则指向tab3 webservice。

public class OrderDetailsTab extends Fragment {
    View view;
    ViewPager viewPager;
    TabLayout tabLayout;

    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.tab_layout, container, false);

        tabLayout = (TabLayout) view.findViewById(R.id.tab_layout);
        viewPager = (ViewPager) view.findViewById(R.id.pager);

        tabLayout.addTab(tabLayout.newTab().setText("STATUS"));
        tabLayout.addTab(tabLayout.newTab().setText("TRUCKS"));
        tabLayout.addTab(tabLayout.newTab().setText("CHARGES"));
        tabLayout.addTab(tabLayout.newTab().setText("QUOTES"));
        tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);

        viewPager.setAdapter(new MyPagerAdapter(getActivity().getSupportFragmentManager()));
        MyPagerAdapter myPagerAdapter=new MyPagerAdapter(getActivity().getSupportFragmentManager());
        viewPager.setAdapter(myPagerAdapter);
        myPagerAdapter.notifyDataSetChanged();
        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) {

            }
        });

        myPagerAdapter.getRegisteredFragment(viewPager.getCurrentItem());

        return view;

    }
    public static class MyPagerAdapter extends DetailPagerAdapter{
        private static int NUM_ITEMS = 4;

        public MyPagerAdapter(FragmentManager fragmentManager) {
            super(fragmentManager);
        }

        @Override
        public Fragment getItem(int position) {
            switch (position) {
                case 0:
                    return StatusTab.init(0);
                case 1:
                    return TruckInfoTab.init(1);
                case 2:
                    return ApprovalTab.init(2);
                case 3:
                    return QuotesFragment.init(3);
                default:
                    return null;
            }
        }

        @Override
        public int getCount() {
            return NUM_ITEMS;
        }
        @Override
        public CharSequence getPageTitle(int position) {
            return "Page " + position;
        }
    }


    @Override
    public void onResume() {
        super.onResume();
        ((AppCompatActivity) getActivity()).getSupportActionBar().hide();

    }

}

抽象适配器类:

public abstract class DetailPagerAdapter extends FragmentPagerAdapter {


    // Sparse array to keep track of registered fragments in memory
    private SparseArray<Fragment> registeredFragments = new SparseArray<Fragment>();

    public DetailPagerAdapter(FragmentManager fragmentManager) {
        super(fragmentManager);
    }

    // Register the fragment when the item is instantiated
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        Fragment fragment = (Fragment) super.instantiateItem(container, position);
        registeredFragments.put(position, fragment);
        return fragment;
    }

    // Unregister when the item is inactive
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        registeredFragments.remove(position);
        super.destroyItem(container, position, object);
    }

    // Returns the fragment for the position (if instantiated)
    public Fragment getRegisteredFragment(int position) {
        Log.e("pos---", "" + position);
        return registeredFragments.get(position);
    }
}

默认情况下,viewpager将加载额外的一页以使体验流畅。

viewPager.setOffscreenPageLimit(int); //默认为1

它是正常情况,不会影响功能,因为您需要在相应的片段中显示服务数据。 例如:片段01:显示服务01数据,依此类推。

设置在空闲状态下视图层次结构中应保留到*当前页面任一侧的页面数。 超出此*限制的页面将在需要时从适配器重新创建。 * *

这是作为优化提供的。 如果您事先知道页面的数量*或需要在页面上采用延迟加载机制*,则调整此设置可以使页面动画和交互的流畅性*受益。 如果您只有很少的页面(3-4)*可以一次全部保持活动状态,则*随着用户来回翻页,新创建的视图子树在布局上将花费更少的时间。

* *

您应将此限制保持在较低水平,尤其是在页面布局复杂的情况下。 *此设置默认为1。

暂无
暂无

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

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