当你从外部GridView点击某张图片进入一个ViewPager预览照片时,你可能需要删除当前的照片,此时你需要在ViewPager外部获取当前显示页面的position(如果你在内部的话直接点击setOnclickListener,会直接得到正确的position)
@Override
public Object instantiateItem(ViewGroup container, final int position) {
View view = View
.inflate(PreviewPicActivity.this, R.layout.item_preview_pic_viewpager, null);
final PhotoView photoView = (PhotoView) view.findViewById(R.id.photoView);
ImageLoader.getInstance().loadImage(mImgPths.get(position), photoView);
photoView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Toast.makeText(PreviewPicActivity.this, "删除" + position, Toast.LENGTH_SHORT).show();
mImgPths.remove(position);
toolbar.setTitle(String.format("%d/%d",
position + 1, mImgPths.size()));
notifyDataSetChanged();
if (mImgPths.size() == 0) {
setImgPathResult();
}
return true;
}
});
((ViewPager) container).addView(view);
return view;
}
但是你想在外部获取该position的话,把这个position传递出去是不行的,应为ViewPager会预加载附近的图片,导致你获取的position是错乱的,应该如下:
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
// 把当前显示的position传递出去
mCurrentPosition = position;
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
此外注意:当你点击外部的GridView时,是不会触发setOnPageChangeListener的,所以要在刚进入ViewPager时,传递当前的position
// 把当前显示的position传递出去
mCurrentPosition = position;