package com.mathiasluo.designer.adpter;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import com.mathiasluo.designer.bean.Shot;
import com.mathiasluo.designer.model.ShotModelImpl;
import com.mathiasluo.designer.presenter.ShotsPresenter;
import com.mathiasluo.designer.utils.LogUtils;
import com.mathiasluo.designer.view.fragment.SingleShotFragment;
import java.util.ArrayList;
import java.util.List;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action1;
import rx.schedulers.Schedulers;
public class ViewPagerAdapter extends FragmentStatePagerAdapter implements ViewPager.OnPageChangeListener {
private List<SingleShotFragment> fragments = new ArrayList<>();
public static int mCurrentPosition = -1;
private ViewPager mViewPager;
public ViewPagerAdapter(FragmentManager fm, ViewPager viewPager) {
super(fm);
this.mViewPager = viewPager;
viewPager.addOnPageChangeListener(this);
viewPager.setOffscreenPageLimit(10);
}
public void addFragment(SingleShotFragment fragment) {
fragments.add(fragment);
notifyDataSetChanged();
}
public void addDatasAndPosition(int position) {
this.mCurrentPosition = position;
for (Shot shot : ShotAdapter.mDataList) {
fragments.add(new SingleShotFragment(shot));
}
notifyDataSetChanged();
}
public void addDatasAndPosition(int position, List<Shot> datas) {
this.mCurrentPosition = position;
int index = fragments.size() - 1;
for (int i = datas.size(); i > 0; i--) {
fragments.get(index).setData(datas.get(i - 1));
index--;
}
}
public void addDatasAndPosition(int position, int count) {
this.mCurrentPosition = position;
for (int i = 0; i < count; i++) {
fragments.add(new SingleShotFragment());
}
notifyDataSetChanged();
}
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public int getCount() {
return fragments.size();
}
@Override
public void onPageSelected(int position) {
mCurrentPosition = position;
if (position == fragments.size() - 1) {
//这里更新数据了
addDatasAndPosition(position, 10);
ShotModelImpl.getInstance()
.getShotsFromServer(ShotsPresenter.page, 10)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<List<Shot>>() {
@Override
public void call(List<Shot> shots) {
addDatasAndPosition(position, shots);
ShotAdapter.mDataList.addAll(shots);
++ShotsPresenter.page;
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
LogUtils.e(throwable.getMessage());
}
});
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
}