Android onClick 自定义 PageAdapter

Android onClick custom PageAdapter

所以我创建了一个通用的 PageAdapter,用于应用程序的各个部分,如下所示:

public class ImagePagerAdapter extends PagerAdapter {

    private final LayoutInflater layoutInflater;
    private final Picasso picasso;
    private final int layoutResId;

    private final List<AssociatedMedia> images;

    public ImagePagerAdapter(Context context, int layoutResId) {
        layoutInflater = LayoutInflater.from(context);
        picasso = Injector.getInstance().getPicasso();
        this.layoutResId = layoutResId;
        this.images = new ArrayList<>();
    }

    public void setMedia(List<AssociatedMedia> media) {
        images.clear();
        for (AssociatedMedia productMedia : media) {
            if (productMedia.type == AssociatedMediaType.IMAGE) {
                images.add(productMedia);
            }
            else {
                // non-images all at the end
                break;
            }
        }
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        AssociatedMedia image = images.get(position);

        ImageView imageView = (ImageView) layoutInflater.inflate(layoutResId, container, false);
        container.addView(imageView);

        picasso.load(Uri.parse(image.urls[0])).into(imageView);

        return imageView;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        ImageView imageView = (ImageView) object;
        container.removeView(imageView);

        picasso.cancelRequest(imageView);
    }

    @Override
    public int getCount() {
        return images.size();
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }

}

然后我在片段中调用这个适配器,如下所示:

ImagePagerAdapter productImageAdapter = new ImagePagerAdapter(getActivity(), R.layout.photo_container_small);
            productImageAdapter.setMedia(medias);
            productImage.setAdapter(productImageAdapter);

我的问题是,如何在片段中调用 onClickListener。所以我的场景是,我们有一个图像轮播,一旦用户单击图像,它将在该图像上打开一个大视图,因此需要一个 onItemClickListener,但这只能在 pagerAdapter 中调用。

那么,有没有办法在片段中调用 onClickListener,或者在点击项目时从适配器通知片段?

这是对您评论的回复。出于格式和大小的原因,我使用了一个答案。这是一个关于如何使用接口将片段与适配器 class 分离的一般示例,这使得适配器可在多个片段(甚至其他项目)中重复使用。

public class MyAdapter {

   MyAdapterListener listener;

   private MyAdapter() {}

   public MyAdapter(MyAdapterListener listeningActivityOrFragment) {

      listener = listeningActivityOrFragment;

   }
}



public interface MyAdapterListener {

   void somethingTheFragmentNeedsToKnow(Object someData);

}


public class SomeFragment extends Fragment implements  MyAdapterListener {

   @Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container,
                            Bundle savedInstanceState) {
      // Inflate the layout for this fragment
      View view = inflater.inflate(R.layout.my_view, container, false);

      // Do everyhting here to init your view.

      // Create an Adapter and bind it to this fragment
      MyAdapter myAdapter = new MyAdapter(this);

      return view;

   }

// Implement the listener interface

   @Override
   public void somethingTheFragmentNeedsToKnow(Object someData) {

      // Get the data and process it.

   }
}

因此在您的情况下,接口中的方法很可能是 onClick(int position); 如果您需要多个方法,则只需添加它们即可。