viewpager+frgment(懒加载)(上下拉刷新)

1:抽fragment基类并且实现懒加载

public abstract class BaseAdapter extends Fragment {
private View view;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    view = inflater.inflate(intoView(),container,false);
    intoById(view);
    return view;
}
protected abstract int intoView();
protected abstract void intoById(View view);

//Fragment的View加载完毕的标记
private boolean isViewCreated;

//Fragment对用户可见的标记
private boolean isUIVisible;


@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    isViewCreated=true;
    lazyLoad();
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    //isVisibleToUser这个boolean值表示:该Fragment的UI 用户是否可见
    if (isVisibleToUser) {
        isUIVisible = true;
        lazyLoad();
    } else {
        isUIVisible = false;
    }
}
private void lazyLoad() {
    //这里进行双重标记判断,是因为setUserVisibleHint会多次回调,并且会在onCreateView执行前回调,必须确保onCreateView加载完毕且页面可见,才加载数据
    if (isViewCreated && isUIVisible) {
        loadData();
        //数据加载完毕,恢复标记,防止重复加载
        isViewCreated = false;
        isUIVisible = false;

    }
}

private void loadData() {
    Log.i("xxx","郁珂");
}}

2:Activity中viewpager展示

public class MainActivity extends AppCompatActivity {
@BindView(R.id.viewpager)
ViewPager viewpager;
@BindView(R.id.btn1)
RadioButton btn1;
@BindView(R.id.btn2)
RadioButton btn2;
@BindView(R.id.btn3)
RadioButton btn3;
@BindView(R.id.btn4)
RadioButton btn4;
@BindView(R.id.btn5)
RadioButton btn5;
@BindView(R.id.group)
RadioGroup group;
private List<Fragment> list;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ButterKnife.bind(this);
    intoView();
    intoData();
}

private void intoView() {
    list = new ArrayList<>();
    list.add(new FragmentOne());
    list.add(new FragmentTwo());
    list.add(new FragmentThree());
    list.add(new FragmentFour());
    list.add(new FragmentFive());
}

private void intoData() {
    viewpager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
        @Override
        public Fragment getItem(int i) {
            return list.get(i);
        }

        @Override
        public int getCount() {
            return list.size();
        }
    });
    group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            switch (checkedId){
                case R.id.btn1:
                    viewpager.setCurrentItem(0);break;
                case R.id.btn2:
                    viewpager.setCurrentItem(1);break;
                case R.id.btn3:
                    viewpager.setCurrentItem(2);break;
                case R.id.btn4:
                    viewpager.setCurrentItem(3);break;
                case R.id.btn5:
                    viewpager.setCurrentItem(4);break;
            }
        }
    });
    viewpager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int i, float v, int i1) {

        }

        @Override
        public void onPageSelected(int i) {
            switch (i){
                case 0:
                    group.check(R.id.btn1);break;
                case 1:
                    group.check(R.id.btn2);break;
                case 2:
                    group.check(R.id.btn3);break;
                case 3:
                    group.check(R.id.btn4);break;
                case 4:
                    group.check(R.id.btn5);break;
            }
        }

        @Override
        public void onPageScrollStateChanged(int i) {

        }
    });
}}

3:Activity中fragment展示

public class MainActivity extends AppCompatActivity {
@BindView(R.id.framelayout)
FrameLayout framelayout;
@BindView(R.id.btn1)
RadioButton btn1;
@BindView(R.id.btn2)
RadioButton btn2;
@BindView(R.id.btn3)
RadioButton btn3;
@BindView(R.id.radiogroup)
RadioGroup radiogroup;
private FragmentOne fragmentOne;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ButterKnife.bind(this);
    initview(new FragmentOne());
    radiogroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            switch (checkedId){
                case R.id.btn1:
                    initview(new FragmentOne());break;
                case R.id.btn2:
                    initview(new FragmentTwo());break;
                case R.id.btn3:
                    initview(new FragmentThree());break;
            }
        }
    });
}

private void initview(Fragment fragment) {
    FragmentManager supportFragmentManager = getSupportFragmentManager();
    FragmentTransaction replace = supportFragmentManager.beginTransaction().replace(R.id.framelayout, fragment);
    replace.commit();
}}

在fragment中实现代码和实现上下拉刷新功能

public class HomeFragment extends BaseAdapter implements ImpView {
private RecyclerView rec;
private SwipyRefreshLayout swp;
private int page=1;
private Presenter presenter;
private Handler handler=new Handler();
@Override
protected int intoView() {
    return R.layout.homefragment;
}
@Override
protected void intoById(View view) {
    swp=view.findViewById(R.id.swp);
    rec=view.findViewById(R.id.rec);
    presenter = new Presenter(this);
    presenter.getResultPresent(page);
    LinearLayoutManager linearLayoutManager=new LinearLayoutManager(getActivity());
    linearLayoutManager.setOrientation(OrientationHelper.VERTICAL);
    rec.setLayoutManager(linearLayoutManager);
    swp.setColorSchemeColors(R.color.colorAccent,R.color.colorPrimary,R.color.colorPrimaryDark);
    swp.setDirection(SwipyRefreshLayoutDirection.BOTH);
    swp.setOnRefreshListener(new SwipyRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh(int index) {
            page=1;
            presenter.getResultPresent(page);
            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    swp.setRefreshing(false);
                }
            },2000);
        }
        @Override
        public void onLoad(int index) {
            page++;
            presenter.getResultPresent(page);
            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    swp.setRefreshing(false);
                }
            },2000);
        }
    });
}
@Override
public void getResultView(List<ResultBean> resultBean) {
    List<ResultBean.DataBean> data = resultBean.get(0).getData();
    MyAdapter myAdapter = new MyAdapter(getActivity(), data);
    rec.setAdapter(myAdapter);
}}

猜你喜欢

转载自blog.csdn.net/weixin_43926099/article/details/88990475