我有以下代码,但我想通过实现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,以输入到click事件函数中。我不明白为什么单击事件发生时位置会一直移动一个。
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);
}
}
谢谢。