简体   繁体   English

使用“回收者视图”和“卡片视图”获取轮播的点击位置

[英]Get the clicked position of carousel with Recycler View and Card View

I'm using this CarouselView library . 我正在使用这个CarouselView库

I have used Recycler View and Card View to create the following UI. 我已经使用了Recycler View和Card View来创建以下UI。

在此处输入图片说明

In each card view, I have added this carousel view and contains images inside carousel. 在每个卡片视图中,我都添加了该轮播视图,并在轮播中包含图像。

This library has the setImageClickListener that gives the index of each clicked image in each card view. 该库具有setImageClickListener ,该setImageClickListener给出了每个卡片视图中每个单击的图像的索引。

customCarouselView.setImageClickListener(new ImageClickListener() {
        @Override
        public void onClick(int position) {
            Toast.makeText(SampleCarouselViewActivity.this, "Clicked item: "+ position, Toast.LENGTH_SHORT).show();
        }
    });

I want to know which image is clicked and from which card that image belongs since there are multiple card-views. 我想知道单击的图像以及该图像属于哪个卡,因为存在多个卡视图。

I tried to register the click event in the ImageView and get the adapterPosition of clicked cardview using getAdapterPosition() . 我试图注册在ImageView的click事件,并获得adapterPosition点击cardview的使用getAdapterPosition()

fruitImageView.setOnClickListener(new View.OnClickListener() {   /*Hits only when another click event (setImageClickListner) is not registered*/
                @Override
                public void onClick(View view) {
                    int a = getAdapterPosition(); //gives the index of clicked cardview position.
                }
            });

When both of the events are registered then only click on ImageView ( fruitImageView.setOnClickListener ) gets hit, which gives the position of the adapter. 当两个事件都注册时,则仅单击ImageView( fruitImageView.setOnClickListener )会被命中,这将给出适配器的位置。 I also want to know which image is clicked. 我也想知道单击了哪个图像。

When I remove this ImageView Click listener, then carousel view click customCarouselView.setImageClickListener gets hit which gives the postion of image clicked but not the adapter position. 当我删除此ImageView Click侦听器时,然后轮播视图单击customCarouselView.setImageClickListener会被命中,它给出了单击的图像的位置,而不是适配器的位置。

Are there any work around for this? 有什么解决办法吗? Please help. 请帮忙。

My Adapter Class complete code: 我的适配器类的完整代码:

public class GridAdapter extends RecyclerView.Adapter<GridAdapter.ViewHolder> {
private ArrayList<HomeSalesModel> salesLists;
int[] sampleImages = {R.drawable.album1, R.drawable.album2, R.drawable.album3, R.drawable.album4, R.drawable.album5};
String[] sampleTitles = {"A", "B", "C", "D", "E"};
Context myContext = null;

public GridAdapter(ArrayList<HomeSalesModel> salesLists) {
    this.salesLists = salesLists;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    myContext = parent.getContext();
    return new ViewHolder(LayoutInflater.from(parent.getContext()), parent);
}

@Override
public void onBindViewHolder(GridAdapter.ViewHolder viewHolder, int i) {
    viewHolder.tv_country.setText(salesLists.get(i).getTitle());
}

@Override
public int getItemCount() {
    return salesLists.size();
}

public class ViewHolder extends RecyclerView.ViewHolder {
    private CarouselView customCarouselView;
    private TextView tv_country;
    private CardView cardView;

    public ViewHolder(LayoutInflater inflater, ViewGroup parent) {
        super(inflater.inflate(R.layout.grid_card_row, parent, false));
        tv_country = (TextView) itemView.findViewById(R.id.tv_country);
        customCarouselView = (CarouselView) itemView.findViewById(R.id.customCarouselView);
        cardView = (CardView) itemView.findViewById(R.id.card);
        customCarouselView.setPageCount(sampleImages.length);
        //customCarouselView.setSlideInterval(4000);
        customCarouselView.setViewListener(viewListener);
        customCarouselView.setImageClickListener(imageClickListner);
    }

    ViewListener viewListener = new ViewListener() {
        @Override
        public View setViewForPosition(int position) {

            LayoutInflater li = (LayoutInflater) myContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View customView = li.inflate(R.layout.view_custom, null);

            TextView labelTextView = (TextView) customView.findViewById(R.id.labelTextView);
            ImageView fruitImageView = (ImageView) customView.findViewById(R.id.fruitImageView);
            fruitImageView.setImageResource(sampleImages[position]);
            labelTextView.setText(sampleTitles[position]);
            fruitImageView.setOnClickListener(new View.OnClickListener() {   /*Works when another click event (imageClickListner) is not registered*/
                @Override
                public void onClick(View view) {
                    int a = getAdapterPosition(); //gives the index cardview position.
                }
            });
            //labelTextView.setText(salesLists.get(position).getProducts().get(position).getSlug());
            return customView;
        }
    };

    ImageClickListener imageClickListner = new ImageClickListener() {
        @Override
        public void onClick(int position) {
            Toast.makeText(myContext, "Clicked item: " + position, Toast.LENGTH_SHORT).show();  //gives index the clicked image.
        }
    };
}

}

只需获得适配器在ImageClickListener位置ImageClickListener

int postion = getAdapterPosition();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM