【问题标题】:Get the clicked position of carousel with Recycler View and Card View通过 Recycler View 和 Card View 获取轮播的点击位置
【发布时间】:2017-08-31 15:46:10
【问题描述】:

我正在使用这个CarouselView library

我使用 Recycler View 和 Card View 创建了以下 UI。

在每个卡片视图中,我都添加了这个轮播视图并在轮播中包含图像。

这个库有setImageClickListener,它给出了每个卡片视图中每个点击图像的索引。

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

我想知道点击了哪个图像以及该图像属于哪个卡片,因为有多个卡片视图。

我尝试在 ImageView 中注册点击事件,并使用getAdapterPosition() 获取点击卡片视图的adapterPosition

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.
                }
            });

当这两个事件都被注册时,只有点击 ImageView (fruitImageView.setOnClickListener) 才会被点击,它给出了适配器的位置。我也想知道点击了哪个图片。

当我删除此 ImageView Click 侦听器时,轮播视图点击 customCarouselView.setImageClickListener 会被点击,这会给出点击图像的位置,而不是适配器位置。

有什么解决办法吗?请帮忙。

我的适配器类完整代码:

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.
        }
    };
}

}

【问题讨论】:

    标签: java android android-layout android-fragments


    【解决方案1】:

    只需在ImageClickListener中获取适配器位置即可。

    int postion = getAdapterPosition();
    

    【讨论】:

      猜你喜欢
      • 2015-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-14
      相关资源
      最近更新 更多