如何将数据从回收器视图单击传递到位于放置我的回收器视图的同一活动中的片段?


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
}

希望这会起作用。

最新更新