如何解决如何在Android中的RecyclerView外部访问TextView?
根据图像,在我的主要活动中,我使用了一个片段,在该片段中有一个水平的RecyclerView,其中包含一些CardView(下图显示了4个)。 TextView在父片段的RecyclerView外部。我想要的是从RecyclerView访问TextView,即,如果我单击RecyclerView内部的卡片,则相应的卡片文本将显示在TextView中。
示例:如果我单击CardView2,则TextView文本将为“ card2”...。如果单击CardView3,则TextView文本将为“ card3”
这是我的适配器类:
public class ScanCodeSliderAdapter extends RecyclerView.Adapter<viewHolder> {
private List<ScanCodeCardModel> scanCodeCardModels;
private Context context;
public ScanCodeSliderAdapter(List<ScanCodeCardModel> scanCodeCardModels,Context context) {
this.scanCodeCardModels = scanCodeCardModels;
this.context = context;
}
@NonNull
@Override
public viewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.single_scan_code_card_item,parent,false);
return new viewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final viewHolder holder,final int position) {
holder.scanCodeSingleItemCardView.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context,""+position,Toast.LENGTH_SHORT).show();
}
});
}
@Override
public int getItemCount() {
return scanCodeCardModels.size();
}
}
这是我的ViewHolder类:
public class viewHolder extends RecyclerView.ViewHolder {
public CardView scanCodeSingleItemCardView;
public viewHolder(@NonNull View itemView) {
super(itemView);
scanCodeSingleItemCardView = itemView.findViewById(R.id.scanCodeSingleItemCardView);
}
}
解决方法
尝试添加onclick方法,该方法将通过findViewById访问TextView对象并在其上设置文本。 OnClick方法将具有View视图属性,因此您可以使用它来了解单击了哪个元素。
对于回收者视图,您还应该具有某种类型的arrayadapter,您可以在其中添加一些将mainactivity用作侦听器的onclick方法。
,在片段类中创建一个公共方法。参数作为字符串。
现在,在recyclerview textview下,单击。调用带有其上下文的fragment类方法。例如。 context.methodName(parameter)。
并在公共方法中使用参数设置textview文本。
执行此操作的最佳方法是通过单击侦听器,该侦听器将允许您在RecyclerView项目与Recycler View外部的小部件或视图之间建立通信。
要设置侦听器,您可以使用以下示例作为指导:
interface OnItemsClickListener{
void onItemClick(ScanCodeCardModel scanCodeCardModels);
}
然后在适配器类中创建一个侦听器变量:
private OnItemsClickListener listener = null;
和一个公共方法,它将处理活动或片段与RecycerView Adapter之间的侦听或侦听,
void setOnItemClickListener(OnItemsClickListener listener){
this.listener = listener;
}
现在回到onClick()覆盖方法内的onBindViewHolder
@Override
public void onBindViewHolder(@NonNull final viewHolder holder,final int position) {
ScanCodeCardModels item = scanCodeCardModels[position]
holder.scanCodeSingleItemCardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Toast.makeText(context,""+position,Toast.LENGTH_SHORT).show();
if(listener != null){
listener.onItemClick(item)
}
}
});
}
这是您在Adapter类中需要做的所有事情。 然后继续您的Fragment或Activity类, 并连接到听众
adapter.setOnItemClickListener(new AdapterName.OnItemClickListener(){
@Override
public void onItemClick(ScanCodeCardModel scanCodeCardModels){
//Set your TextView here when card is Clicked on
textView.setText(scanCodeModels.name)
}
})
仅此而已。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。