2016-09-15 65 views
0

當我scrooling從tab0 viewpager到tab1然後tab1顯示正確,但它擊中了tab2 webservice。顯示tab2時模擬,然後打到tab3 webservice。ViewPager問題,而Scrooling

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

回答

0

默認viewpager會加載一個額外的頁面進行體驗流暢。

viewPager.setOffscreenPageLimit(INT); //缺省爲一個

其正常狀況和不會影響功能,根據需要在對應片段來顯示服務數據。 例:片段01:顯示服務01數據等。

設置應保留在處於空閒狀態的視圖層次結構中 *當前頁面任一側的頁數。超出此 *限制的頁面將在需要時從適配器重新創建。 * *

這是作爲優化提供的。如果您事先知道頁面上需要支持的頁面數量 *,或者在您的頁面上使用了延遲加載機制 *,則調整此設置可以在分頁動畫和交互的感知平滑度 *中獲益。如果您有一小部分頁面(3-4) *,您可以一次保持活動狀態,則在用戶頁面前後翻頁時,將花費更少的時間在 *新創建的視圖子樹的佈局中。

* *

您應該保持低限,特別是如果您的頁面佈局複雜。 *此設置默認爲1.

+0

我hade made viewPager.setOffscreenPageLimit(0);但是當我來到tab1它仍然觸及tab2 web服務調用。實際上,當我從數據庫中更改數據,然後tab1數據不會改變,但是當我從tab3返回時,它將更改數據 –

+0

在viewPager.setOffscreenPagou eLimit(0)中使用0無效。正如我在上面的答案中所說默認的int值是1.如果你提供0,那麼它將被替換爲1 –

+0

我應該怎麼做才能解決代碼 –