Как я могу добавить OnClickListener в PagerAdapter - PullRequest
0 голосов
/ 04 апреля 2019

Я использую PagerAdaper для слайдов изображений в моем приложении.Я хочу добавить слушателя, это означает, что если изображение показывается, когда я нажимаю на него, оно что-то говорит.давайте предположим, что у меня есть изображение яблока, теперь я хочу добавить слушателя, когда я нажимаю на него, это говорит яблоко.Я хочу добавить то же самое для всех необработанных файлов.

package com.example.slider;

import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

public class ImageAdapter extends PagerAdapter {
    private Context mcontext;
    private int[] myImages = new int[] {R.raw.one , R.raw.two, R.raw.three,
            R.raw.four , R.raw.five , R.raw.six, R.raw.seven, R.raw.eight,
            R.raw.nine, R.raw.ten, R.raw.eleven, R.raw.twele , R.raw.thirteen, R.raw.fourteen,
            R.raw.fifteen, R.raw.one_image, R.raw.two_image,
            R.raw.three_image, R.raw.four_image, R.raw.five_image,
            R.raw.six_image, R.raw.seven_image};

    ImageAdapter(Context context){
        mcontext = context;
    }


    @Override
    public int getCount() {
        return myImages.length;
    }

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

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

        ImageView imageView = new ImageView(mcontext);
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setImageResource(myImages[position]);
        container.addView(imageView,0);
        return imageView;
    }

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

}

1 Ответ

0 голосов
/ 04 апреля 2019

Существует несколько различных возможных решений.Один способ связать каждое представление с его ресурсом изображения, используя HashMap.

public class ImageAdapter extends PagerAdapter {
private Context mcontext;
private int[] myImages = new int[] {R.raw.one , R.raw.two, R.raw.three,
        R.raw.four , R.raw.five , R.raw.six, R.raw.seven, R.raw.eight,
        R.raw.nine, R.raw.ten, R.raw.eleven, R.raw.twele , R.raw.thirteen, R.raw.fourteen,
        R.raw.fifteen, R.raw.one_image, R.raw.two_image,
        R.raw.three_image, R.raw.four_image, R.raw.five_image,
        R.raw.six_image, R.raw.seven_image};

ImageAdapter(Context context){
    mcontext = context;
}

private HashMap<View, Integer> viewToImageResource = new HashMap<>();
private View.OnClickListener clickListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Integer clickedImageResource = viewToImageResource.get(v);
        // Do something with clickedImageResource
    }
};


@Override
public int getCount() {
    return myImages.length;
}

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

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

    ImageView imageView = new ImageView(mcontext);
    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
    imageView.setImageResource(myImages[position]);
    container.addView(imageView,0);
    viewToImageResource.put(container, myImages[position]);
    container.setOnClickListener(clickListener);
    return imageView;
}

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

}
...