ViewPager 的点击事件回调

今天在交流群看到有人问这个问题,礼拜五工作忙的差不多多了,闲暇时间就记录一下呢,很简单的,记得自己刚毕业的时候

也是请教了别人,没想到时隔多年自己也能帮助到他人,

 首先需要知道 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);
    }

}

最后说下说下使用

扫描二维码关注公众号,回复: 9817237 查看本文章

在activity 里面通过 adapter 调用接口里面方法就行了

   pageAdapter.setCallBack(new PageAdapter.CallBack() {
            @Override
            public void OnClick(int position) {
                Toast.makeText(SimpleViewPagerActivity.this, "点击了第" + position + "个", Toast.LENGTH_SHORT).show();
            }
        });
发布了659 篇原创文章 · 获赞 250 · 访问量 63万+

猜你喜欢

转载自blog.csdn.net/qq_33210042/article/details/104839432