public class MyViewPagerAdapter extends PagerAdapter {
private List<LocalMusic> list;
private Context mContext;
public MyViewPagerAdapter(List<LocalMusic> list, Context mContext) {
this.list = list;
this.mContext = mContext;
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public Object instantiateItem(ViewGroup container, final int position) {
View inflate = LayoutInflater.from(container.getContext()).inflate(R.layout.layout_main_music_control, container, false);
final LayoutMainMusicControlBinding layoutMainMusicControlBinding = DataBindingUtil.bind(inflate);
final LocalMusic localMusic = list.get(position % list.size());
layoutMainMusicControlBinding.imageBottomControlItem.setImageDrawable(mContext.getDrawable(getImageResIdFromSinger(localMusic.getSongAuthor())));
layoutMainMusicControlBinding.tvSinger.setText(localMusic.getSongAuthor());
layoutMainMusicControlBinding.tvSongname.setText(localMusic.getName());
container.addView(inflate);
inflate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(myonClicklistener!=null){
myonClicklistener.onclick(layoutMainMusicControlBinding.imageBottomControlItem,position% list.size());
}
}
});
return inflate;
}
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(((View) object));
}
/**
* 从课程名得到此时图片id
*/
private int getImageResIdFromSinger(String strClassName) {
int resid = 0;
if (strClassName.equals("智慧词条")) {
resid = R.drawable.class_zhihuicitiao;
} else if (strClassName.equals("梅花易数")) {
resid = R.drawable.class_meihua;
} else if (strClassName.equals("玄空风水")) {
resid = R.drawable.class_fengshui;
} else if (strClassName.equals("阴阳")) {
resid = R.drawable.class_yinyang;
} else if (strClassName.equals("五行")) {
resid = R.drawable.class_wuxing;
} else if (strClassName.equals("八卦")) {
resid = R.drawable.class_bagua;
} else if (strClassName.equals("天干")) {
resid = R.drawable.class_tiangan;
} else if (strClassName.equals("地支")) {
resid = R.drawable.class_dizhi;
} else if (strClassName.equals("姓名学")) {
resid = R.drawable.class_xingmingxue;
} else if (strClassName.equals("罗盘应用")) {
resid = R.drawable.class_luopan;
} else if (strClassName.equals("风俗禁忌")) {
resid = R.drawable.class_fengsu;
} else if (strClassName.equals("测字精讲")) {
resid = R.drawable.class_cezi;
}
return resid;
}
private myonClicklistener myonClicklistener;
public interface myonClicklistener{
void onclick(View view,int positon);
}
public void setMyonClicklistener(MyViewPagerAdapter.myonClicklistener myonClicklistener) {
this.myonClicklistener = myonClicklistener;
}
// private int mChildCount = 0;
// @Override
// public void notifyDataSetChanged() {
//
// mChildCount = getCount();
// super.notifyDataSetChanged();
// }
// @Override
// public int getItemPosition(Object object) {
// if ( mChildCount > 0) {
// mChildCount --;
// return POSITION_NONE;
// }
// return super.getItemPosition(object);
// }
}
项目中的一部分,最底下那个注了的代码,可以有效提高notifydatachange的,but 非常耗费,
返回Inter.maxvue
向右翻页OK.向左的话,可以设置setCurrentItem 让他(position+list.size) 或(list.size*10)这种的,因为instantiateItem这个方法中取了膜所以可以.