簡體   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