1,需求: 首页,第一次请求所有数据,但是后台没有进行分页,只能前端来做了。每滑动一次viewpage 就加载6条数据。
2,主页代码。
public class MainActicity extends BaseActivity{
public static List<TestItem> sList=new ArrayList<>();//進來把數據放在全局。
public static int sPage=0;//全局 页数,等于 viewpage的下标。
public static int sPageSize=6;//每頁取出的數量、
private List<TestItem> lista; //網絡請求后的數據。
private ViewPager vp;
private MainFragmentAadapter mAdapter;
private List<Integer> 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 <page ; 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<TestItem> 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<Integer> list;
public MainFragmentAadapter(FragmentManager fm,List<Integer> 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); 注释掉不会 重复加载。只加载一遍,懒加载的话,要用到。
}
}