2013-03-02 78 views
1

有无限制Fragment + ViewPager使用无限滚动吗?无限滚动使用限制片段

例如:

我要创建10 Fragment,当我滚动到第五Fragment,索引号为0的片段被破坏并显示在第十一Fragment

**1** 2 3 4 5 6 7 8 9 10 

滚动后到第五

2 3 4 **5** 6 7 8 9 10 11 

变量

private static final int NUM_PAGES = 10; 

这里是我的Fragment adapter

这里是包含Fragment的显示与数字1

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    ViewGroup rootView = (ViewGroup) inflater.inflate(
      R.layout.fragment_view, container, false); 

    ((TextView) rootView.findViewById(R.id.tvUsername)).setText(
      ""+ (mPageNumber + 1)); 
    return rootView; 
} 

这里开始是当所选事件发生

mPager.setOnPageChangeListener(new OnPageChangeListener() { 

    @Override 
    public void onPageSelected(int pageSelected) { 
     // TODO Auto-generated method stub 
     Log.d(TAG, "selected = " + pageSelected); 
     if (pageSelected > (NUM_PAGES - 6)) { 
        //Event do it here? 
     } 
    } 

    @Override 
    public void onPageScrolled(int arg0, float arg1, int arg2) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onPageScrollStateChanged(int arg0) { 
     // TODO Auto-generated method stub 

    } 
}); 

问题: 如何创建事件?

我认为可以通过更改getItem()中的position值来完成。 但我不知道该怎么做

回答

0

我能想出的唯一方法是只做三页,当用户滚动到最后一页时,您替换每个片段。事情是这样的:

阵列

ArrayList<Integer> positions = new ArrayList<Integer>(); 

public void initPositions() { 
    positions.add(0); 
    positions.add(1); 
    positions.add(2); 
} 

适配器

}

听者

mPager.setOnPageChangeListener(new OnPageChangeListener() { 

    @Override 
    public void onPageSelected(int pageSelected) { 
     //scrolled to first page 
     if(pageSelected == 0) { 
        //Make sure its not unlimited upwards 
        if(positions.get(pageSelected == 0)) 
         return; 
        //remove last and insert new at bottom 
      positions.remove(2); 
      positions.insert(0, positions.get(0) - 1); 
     //scrolled to last page 
     } else if(pageSelected == 2) { 
        //remove first and add one last 
      positions.remove(0); 
      positions.add((positions.get(1) + 1) % NUM_PAGES); 
     } 
      //make sure the adapter understands 
      mAdapter.notifyDataSetChanged(); 
      //move pager to the middle again 
      mPager.setCurrentItem(1); 
    } 

    @Override 
    public void onPageScrolled(int arg0, float arg1, int arg2) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onPageScrollStateChanged(int arg0) { 
     // TODO Auto-generated method stub 

    } 
    }); 

不知道如何做到这一点performancewise工作,或者如果它会 工作在所有,但给它一个:)

+0

谢谢你,我会尝试 – Sieryuu 2013-03-05 01:13:45

+0

ArrayList没有insert()函数,我可以知道你是怎么做到的吗? – Sieryuu 2013-03-05 01:27:51