ViewPage固定每页加载的数量。进行翻页
16lz
2021-01-26
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(安卓)- Intent
- android中gridview的上拉加载更多
- Android实现多参数文件和数据上传
- Android(安卓)小陷阱
- StageFright框架流程解读
- android广告自动滚动并用picasso实现图片加载
- 如何获取手机短信和通话记录信息
- Android(安卓)获取手机中微信聊天记录并后台发送到邮箱
- Android(安卓)异步加载图片-AsyncTask