如何在Android中的RecyclerView外部访问TextView?

问题描述

根据图像,在我的主要活动中,我使用了一个片段,在该片段中有一个水平的RecyclerView,其中包含一些CardView(下图显示了4个)。 TextView在父片段的RecyclerView外部。我想要的是从RecyclerView访问TextView,即,如果我单击RecyclerView内部的卡片,则相应的卡片文本将显示在TextView中。

示例:如果我单击CardView2,则TextView文本将为“ card2”...。如果单击CardView3,则TextView文本将为“ card3”

access textview outside recylerview

这是我的适配器类:

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

仅此而已。