首页 > 解决方案 > PagerAdapter 实现 View.OnClickListener 的重构建议

问题描述

我有以下代码,但我想通过实现 View.OnClickListener 将 View.OnClickListener 对象合并到一个函数中。但是当点击事件发生时页面的位置不断变化。在重构之前,我的代码如下所示:

public class APagerAdapter extends PagerAdapter{
private OnQuoteItemClickListener quoteItemClickListener;
    public APagerAdapter(ArrayList<Quote> list, Context context) {
        this.list = list;
        this.context = context;

}

@Override
public Object instantiateItem(ViewGroup container, final int position) {



    quote.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            TextView v = (TextView) view;
            if (quoteItemClickListener != null) {
                quoteItemClickListener.onQuoteClick(position);

            }
            startAction(v, v);
        }
    });


    container.addView(layout);

    return layout;
}

public void setQuoteItemClickListener(OnQuoteItemClickListener listener){
    this.quoteItemClickListener = listener;
}

public interface OnQuoteClickListener{
    void onQuoteClick(int pos);
}
}

我重构的代码。当点击事件发生时,项目的位置会发生变化。我将位置的全局变量设置为 int i 以输入点击事件函数。我不明白为什么当点击事件发生时位置不断移动。

public class APagerAdapter extends PagerAdapter implements View.OnClickListener{
private OnQuoteItemClickListener quoteItemClickListener;
int i = 0;
public APagerAdapter(ArrayList<Quote> list, Context context) {
    this.list = list;
    this.context = context;

}

@Override
public Object instantiateItem(ViewGroup container, final int position) {
   i = position;
    quote.setOnClickListener(this);
}

@Override
    public void onClick(View v) {
       if(v.getTag().equals("quote")){
                startAction(v, i);

        }
    }

public void setQuoteItemClickListener(OnQuoteItemClickListener listener){
    this.quoteItemClickListener = listener;
}
public interface OnQuoteItemClickListener{
    void onQuoteClick(int pos);
}
}

谢谢。

标签: androidandroid-pageradapterandroid-event

解决方案


推荐阅读