ViewPage固定每页加载的数量。进行翻页

1,需求: 首页,第一次请求所有数据,但是后台没有进行分页,只能前端来做了。每滑动一次viewpage 就加载6条数据。
2,主页代码。

public class MainActicity extends BaseActivity{
    public static List sList=new ArrayList<>();//進來把數據放在全局。
    public static int sPage=0;//全局 页数,等于 viewpage的下标。
    public static int sPageSize=6;//每頁取出的數量、
    private List lista; //網絡請求后的數據。
    private ViewPager vp;
    private MainFragmentAadapter mAdapter;
    private List list;// Fragmeng 的數量
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity1_main);
        initView();
        vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                sPage=position;
                Log.e("", "onPageScrolled: 这是ViewPage的第"+position );
            }
            @Override
            public void onPageSelected(int position) {
                Log.e("", "onPageScrolled: 这是ViewPage的第2222"+position );

            }
            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
    }
    /*http://192.168.2.250:8888/svn/wisdom_hotel/apk*/
    private void initView() {
        lista=new ArrayList<>();
        for (int i = 0; i <28 ; i++) {
            if (i%sPageSize==0||i%(sPageSize+sPage)==3){//相隔4个,每一页 这个就要加1、
                lista.add(new TestItem(1,"王小明"+i));
            }else{
                lista.add(new TestItem(2,"王小明"+i));
            }
        }
        sList=lista;//存贮到全局。
        vp= (ViewPager) findViewById(R.id.viewpage);

        //根据总页数 确定循环的次数。
        list=new ArrayList<>();//這個傳到 適配器裏面。 告訴適配器要生成幾個 Fragment.
        //
        int  page=sList.size()/sPageSize;//頁數=sList/每頁抓取的數據、
        if (sList.size()%sPageSize!=0){//說明還有多的。
            page=page+1;
        }
        for (int i = 0; i //頁數、
            list.add(i);
        }
        mAdapter=new MainFragmentAadapter(getSupportFragmentManager(),list);
        vp.setAdapter(mAdapter);
    }

3,

public class MainFragment extends BaseFragment {
    private RecyclerView reView;
    private MainAdapter adapter;
    private TextView tvName;
    private int pageaaa;//根據 分析出來的椰樹。
    private List list;//这个是临时  数据。 全局数据

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_main, container, false);
        initView(view);
        return view;
    }


    //初始化。
    private void initView(View view) {
        pageaaa = getArguments().getInt("list");
        getPageDate(pageaaa);
        reView = view.findViewById(R.id.rectvle_view);
        adapter = new MainAdapter(list);
        StaggeredGridLayoutManager linearLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.HORIZONTAL);
        linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
        reView.setLayoutManager(linearLayoutManager);
        reView.setAdapter(adapter);
    }

    public static Fragment getFragment(Bundle bundle) {
        //核心 这里写个全局方法。在适配器那边调用。
        MainFragment oneFragment = new MainFragment();
        oneFragment.setArguments(bundle);
        return oneFragment;
    }

    /**
     * 每页取6个数据。
     *
     * @param page viewpage 的第几页
     */
    public void getPageDate(int page) {
        list = new ArrayList<>();
        int s = page * sPageSize;//每页开始取数据的标记。 页数*数量、

        if ((sList.size() - s) < sPageSize && (sList.size() - s) > 0) {//如果最后一页 要获取的数量,小于6或者 大于0 说明 有数据、但是 是多少?
            for (int i = s; i < sList.size() - s; i++) {
                list.add(sList.get(i));
            }
        } else {
            for (int i = s; i < s + sPageSize; i++) {
                list.add(sList.get(i));
            }
        }


    }
}

4, Fragment Adapter 适配器

public class MainFragmentAadapter extends FragmentPagerAdapter{
    List list;


    public MainFragmentAadapter(FragmentManager fm,List list) {
        super(fm);
        this.list=list;
    }


    @Override
    public Fragment getItem(int position) {
        Bundle bundle=new Bundle();
        bundle.putInt("list",list.get(position));
        return MainFragment.getFragment(bundle);//直接调用Fragment中的全局方法
    }

    @Override
    public int getCount() {
        return list.size();
    }
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
//        super.destroyItem(container, position, object); 注释掉不会 重复加载。只加载一遍,懒加载的话,要用到。
    }
}

你可能感兴趣的:(Android,Android随笔记录)