![](/img/trans.png)
[英]visibility issue in ViewPager in SherlockFragments while scrolling (in gingerbread)
[英]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.