问题描述
这是我的适配器类,其中包含我的 onClick 侦听器,我希望它根据在回收器视图中单击的项目打开各种活动。我似乎无法实现可以完成这项工作的方法。
//DATA BOUND TO VIEWS
@Override
public void onBindViewHolder(MyHolder holder,int position) {
//BIND DATA
holder.ProductCategory.setText(products.get(position).getProductCategory());
holder.Productimage.setimageResource(products.get(position).getProductimage());
//IMPLEMENT CLICK LISTENER
holder.setItemClickListener(new ItemClickListener() {
@Override
public void onItemClick(View v,int pos) {
//i get errors when i try to implement in this method
}
});
}
解决方法
您可以将点击监听器设置为您的持有者类的 itemView
为:
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Place your logic to open diffrent activity based on holder.getAdapterPosition()
}
});
并将您的活动打开逻辑放在 onClick() 方法中。使用 holder.getAdapterPosition()
定位当前视图
实际上,我只是通过添加“if else”语句解决了这个问题,该语句指定当回收器视图中的项目根据其在列表中的位置被点击时应采取的操作。
//DATA BOUND TO VIEWS
@Override
public void onBindViewHolder(MyHolder holder,int position) {
//BIND DATA
holder.ProductCategory.setText(products.get(position).getProductCategory());
holder.ProductImage.setImageResource(products.get(position).getProductImage());
//IMPLEMENT CLICK LISTENER
holder.setItemClickListener(new ItemClickListener() {
@Override
public void onItemClick(View v,int pos) {
// this is the solution
if(position == 0){
//first item clicked
Intent intent = new Intent(c,CartWeb.class);// what happens when an
// item is clicked
c.startActivity(intent);
}else if(position == 1){
//second item clicked
Intent intent = new Intent(c,Options.class);
c.startActivity(intent);
}
}
});
,
在 onCreateVHolder 中实现点击监听
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION) {
// here implement which you want onItem click
}
}
});