public void onBindViewHolder(@NonNull final myViewHolder holder, final int position) {
holder.tvItem.setText(itemList.get(position).getmTitle());
Picasso.get().load(itemList.get(position).geturl()).into(holder.imgFlag);
holder.cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final ModelClass model= itemList.get(position);
}
});
这是一个示例,您可以遵循此示例并根据您的要求进行调整-
在适配器中创建接口
public interface OnItemClickListener {
void onItemClicked(int position, Object object);
}
在适配器调用中
Adapter adapter = new Adapter(context, list, new Adapter.OnItemClickListener() {
@Override
public void onItemClicked(int position, Object object) {
// Handle Object of list item here
}
});
在您的适配器上
private OnItemClickListener onItemClickListener; // Global scope
在构造函数调用中:
this.onItemClickListener = onItemClickListener;
在您的项目点击事件上:
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onItemClickListener.onItemClicked(position, _list.get(position));
}
});
您可以将此视图用于单视图和多视图单击
适配器查看器类 公共类 MyViewHolder 扩展了 RecyclerView.ViewHolder 实现
View.OnClickListener {
CircleImageView imgPlayer;
TextView playerRole;
public MyViewHolder(View itemView) {
super(itemView);
imgPlayer = itemView.findViewById(R.id.trnmt_player);
playerRole = itemView.findViewById(R.id.pRole_id);
playerRole .setOnClickListener(this);
imgPlayer.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v == imgPlayer) {
onItemClickListener.onItemClicked(position,list.get(position));
} else if(v==playerRole){
}
}
}
}
接口
public interface OnItemClickListener {
void onItemClicked(int position, Object object);
}
内部适配器
private OnItemClickListener onItemClickListener;
如果您提供代码的一些快照,这将很有帮助。
尽管您可以在回收商查看您的活动时获得点击操作的回调。因此,为此,您需要创建自己的侦听器并设置为自定义适配器。
创建操作侦听器
public interface ActionListener<T> {
void onClickAction(int positionOfItem, T object);//here T will be the type of object bound to your view.
}
现在在自定义适配器中创建一个方法来设置此侦听器
private ActionListener mListener;
public void setActionListener(ActionListener listener){
mListener = listener;
}
现在使用此侦听器从适配器导航回调。
public void onBindViewHolder(@NonNull final myViewHolder holder, final int position) {
holder.tvItem.setText(itemList.get(position).getmTitle());
Picasso.get().load(itemList.get(position).geturl()).into(holder.imgFlag);
holder.cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final ModelClass model= itemList.get(position);
listener.onClickAction(position, model);//this will pass the call to the listener.
}
});
}
现在,将侦听器设置为活动类中的适配器,您刚刚在其中创建了适配器实例。在这里,您需要在片段中调用一个方法。要获取片段,您可以使用findFramgentById((或findFragmentByTag((方法。
adapter.setActionListener(new ActionListener<ModelClass>(){
void onClickAction(int positionOfItem, ModelClass object){
MyFragment fragment = (MyFragment) getSupportFragmentManager().findFragmentByTag();
fragment.updateActionData(object);
}
});
请在您的片段中创建一个方法,如下所示:
public void updateActionData(ModelClass object){
//to do your work with object
}
希望这会起作用。