今天在交流群看到有人问这个问题,礼拜五工作忙的差不多多了,闲暇时间就记录一下呢,很简单的,记得自己刚毕业的时候
也是请教了别人,没想到时隔多年自己也能帮助到他人,
首先需要知道 pagerAdapter 中 有 instantiateItem 这个方法的作用就是根据当前的posistion来创建对应的视图并且将这个创建好的视图添加到容器中,
可以打印下里面的position
回调这个position 首先先定义一个 接口然后接口里面再写一个空方法例如
public interface CallBack {
void OnClick(int position);
}
然后在定义这个接口方法,在通过快捷键生成get和set方法,当然由于get方法没有用到可以直接删除
‘
private CallBack callBack;
public void setCallBack(CallBack callBack) {
this.callBack = callBack;
}
然后在监听事件里面 调用接口里面的方法
@Override
public Object instantiateItem(ViewGroup container, final int position) {
View view = arrayList.get(position);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (callBack != null) {
callBack.OnClick(position);
}
}
});
container.addView(view);
return view;
}
这样就写好了 ,暴漏下adapter
public class PageAdapter extends PagerAdapter {
private ArrayList<View> arrayList;
private Context context;
public PageAdapter() {
}
public PageAdapter(ArrayList<View> arrayList, Context context) {
super();
this.arrayList = arrayList;
this.context = context;
}
// 返回视图的个数
@Override
public int getCount() {
return arrayList.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
// 当返回为true的时候,就将根据当前的position得到的view展示出来
return view == object;
}
// 这个方法的主要作用就是根据当前的posistion来创建对应的视图,
// 并且将这个创建好的视图添加到容器中
@Override
public Object instantiateItem(ViewGroup container, final int position) {
View view = arrayList.get(position);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (callBack != null) {
callBack.OnClick(position);
}
}
});
container.addView(view);
return view;
}
// 这个方法的作用就是从容器中移除position所对应的视图,
// 而且这个移除的动作是在finishUpdate之前完成的。
// 这个在 instantiateItem 方法中也提到过,
// 也就是说在finishUpdate之前至少要完成两个动作①原来视图的移除②新视图的增加
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(arrayList.get(position));
}
private CallBack callBack;
public void setCallBack(CallBack callBack) {
this.callBack = callBack;
}
public interface CallBack {
void OnClick(int position);
}
}
最后说下说下使用
在activity 里面通过 adapter 调用接口里面方法就行了
pageAdapter.setCallBack(new PageAdapter.CallBack() {
@Override
public void OnClick(int position) {
Toast.makeText(SimpleViewPagerActivity.this, "点击了第" + position + "个", Toast.LENGTH_SHORT).show();
}
});