實現ViewPager結合Fragment實現無限循環切換,這里也是在適配器里面進行的,當然使用滑動監聽也能夠實現
import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentPagerAdapter;import android.view.ViewGroup;import java.util.ArrayList;public class adapter extends FragmentPagerAdapter{ private ArrayList<Fragment> fragmentList; public adapter(FragmentManager fm) { super(fm); } public adapter(FragmentManager fm, ArrayList<Fragment> fragmentList) { super(fm); this.fragmentList=fragmentList; } @Override public Fragment getItem(int position) { //在這里不處理position的原因是因為getItem方法在 //instantiateItem方法中調用。只要在調用前處理 //position即可,以免重復處理 return fragmentList.get(position); } @Override public int getCount() { return Integer.MAX_VALUE; } @Override public int getItemPosition(Object object) { return super.getItemPosition(object); } @Override public Object instantiateItem(ViewGroup container, int position) { //處理position。讓數組下標落在[0,fragmentList.size)中,防止越界 position = position % fragmentList.size(); return super.instantiateItem(container, position); }}經過實際檢驗,要傳進4個fragment,否則往右邊滑動會出現問題,原因不知......
想要實現答題界面的翻頁效果便可以采用這種方法,可以建立一個ReadFragment,然后new 出4個這個Fragment的對象。不同頁面的共同的處理可以直接在ReadFragment里頭實現,翻頁的時候每一頁需要改變的參數可以在滑動監聽器里獲取這4個對象來實現。
Fragment a=new ReadFragment(); Fragment b=new ReadFragment(); Fragment c=new ReadFragment(); Fragment d=new ReadFragment(); list=new ArrayList<Fragment>(); list.add(a); list.add(b); list.add(c); list.add(d); readViewPager.setAdapter(new adapter(getSupportFragmentManager(),list));
readViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {} @Override public void onPageSelected(int position) { //處理position。讓position落在[0,fragmentList.size)中,防止數組越界 position = position % list.size(); ReadFragment fragment= (ReadFragment) list.get(position); //獲得此時選中的fragment fragment.refreshState(); //翻頁的時候每個頁面需要改變的參數使用這個方法來實現,這個方法在ReadFragment里面,修飾器得使用public ... } @Override public void onPageScrollStateChanged(int state) {} });以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。
新聞熱點
疑難解答