package com.ixuea.courses.mymusic.adapter;
import android.content.Context;
import java.util.ArrayList;
import java.util.List;
import androidx.annotation.NonNull;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;
/**
* 通用FragmentPagerAdapter
* 主要是创建了列表
* 实现了通用的方法
* 直接用FragmentPagerAdapter有可能有内存泄漏
* 所以使用FragmentStatePagerAdapter
* 具体的这里不讲解
* 会在详解系列课程中讲解
*
* getItem 在子类重写
*/
public abstract class BaseFragmentPagerAdapter<T> extends FragmentStatePagerAdapter {
protected final Context context;
private List<T> datum = new ArrayList<>();
public BaseFragmentPagerAdapter(Context context, @NonNull FragmentManager fm) {
super(fm);
this.context = context;
}
// @NonNull
// @Override
// public Fragment getItem(int position) { //这个方法用子类重写
// return datum.get(position);
// }
@Override
public int getCount() {
return datum.size();
}
/**
* 返回当前的数据
* @param position
* @return
*/
protected T getData(int position) {//返回当前的数据
return datum.get(position);
}
/**
* 设置数据
* @param datum
*/
public void setDatum(List<T> datum) {
if (datum != null && datum.size() > 0) {
this.datum.clear();
this.datum.addAll(datum);
notifyDataSetChanged();
}
}
/**
* 添加数据
* @param datum
*/
public void addDatum(List<T> datum) {
if (datum != null && datum.size() > 0) {
this.datum.addAll(datum);
notifyDataSetChanged();
}
}
}
使用
import android.content.Context;
import com.ixuea.courses.mymusic.fragment.GuideFragment;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
/**
* ViewPager 的适配器
*
* 引导界面适配器
*
*/
public class GuideAdapter extends BaseFragmentPagerAdapter<Integer>{
// protected final Context context;//这个可以不用写,因为父类里面已经继承了
public GuideAdapter(Context context, @NonNull FragmentManager fm) {
super(context,fm);
// this.context = context;
}
/**
* 当前的item(当前位置fragment)
* @param position
* @return
*/
@NonNull
@Override
public Fragment getItem(int position) {
// return GuideFragment.newInstance(R.drawable.guide1);
return GuideFragment.newInstance(getData(position));
}
}
adapter = new GuideAdapter(getMainActivity(),getSupportFragmentManager());
vp.setAdapter(adapter);
ci.setViewPager(vp);///让指示器根据列表控件配合工作
//适配器注册数据源观察者
adapter.registerDataSetObserver(ci.getDataSetObserver());
//准备数据
List<Integer> datum = new ArrayList<>();
datum.add(R.drawable.guide1);
datum.add(R.drawable.guide2);
datum.add(R.drawable.guide3);
datum.add(R.drawable.guide4);
datum.add(R.drawable.guide5);
adapter.setDatum(datum);//设置数据到适配器