如何在 Android 中访问 RecyclerView 外部的 TextView?
How to access a TextView outside RecyclerView in Android?
根据图像,在我的主要 activity 中,我使用了一个片段,在这个片段中有一个水平的 RecyclerView,还有一些 CardView(下图中显示了 4 个)。 TextView 在父片段的 RecyclerView 之外。我想要的是,从 RecyclerView 访问 TextView 即如果我在 RecyclerView 中单击一张卡片,相应的卡片文本将显示在 TextView 中。
示例: 如果我单击 CardView2,TextView 文本将为“card2”......如果我单击 CardView3,TextView 文本将为“card3”
这是我的适配器Class:
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 Class:
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 视图属性,因此您可以使用它来了解单击了哪个元素。
你还应该有某种数组适配器用于你的回收视图,你可以在那里添加一些将使用 mainactivity 作为侦听器的 onclick 方法。
在片段 class 中创建一个 public 方法。参数为字符串。
现在在 recyclerview textview 下单击 。使用其上下文调用片段 class 方法。例如。 context.methodName(参数)。
并进入 public 方法使用参数设置 textview 文本。
最好的方法是通过点击侦听器,它允许您在 RecyclerView 项目和回收器视图之外的小部件或视图之间建立通信。
要设置侦听器,您可以使用此示例作为指导:
interface OnItemsClickListener{
void onItemClick(ScanCodeCardModel scanCodeCardModels);
}
然后在您的适配器中创建一个侦听器变量 class:
private OnItemsClickListener listener = null;
和一个 public 方法,它将像这样处理或监听您的 activity 或片段与 RecycerView 适配器
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)
}
}
});
}
这就是您在适配器中需要做的所有事情 class。
然后继续你的 Fragment 或 Activity class,
并连接到监听器
adapter.setOnItemClickListener(new AdapterName.OnItemClickListener(){
@Override
public void onItemClick(ScanCodeCardModel scanCodeCardModels){
//Set your TextView here when card is Clicked on
textView.setText(scanCodeModels.name)
}
})
仅此而已。
根据图像,在我的主要 activity 中,我使用了一个片段,在这个片段中有一个水平的 RecyclerView,还有一些 CardView(下图中显示了 4 个)。 TextView 在父片段的 RecyclerView 之外。我想要的是,从 RecyclerView 访问 TextView 即如果我在 RecyclerView 中单击一张卡片,相应的卡片文本将显示在 TextView 中。
示例: 如果我单击 CardView2,TextView 文本将为“card2”......如果我单击 CardView3,TextView 文本将为“card3”
这是我的适配器Class:
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 Class:
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 视图属性,因此您可以使用它来了解单击了哪个元素。
你还应该有某种数组适配器用于你的回收视图,你可以在那里添加一些将使用 mainactivity 作为侦听器的 onclick 方法。
在片段 class 中创建一个 public 方法。参数为字符串。
现在在 recyclerview textview 下单击 。使用其上下文调用片段 class 方法。例如。 context.methodName(参数)。
并进入 public 方法使用参数设置 textview 文本。
最好的方法是通过点击侦听器,它允许您在 RecyclerView 项目和回收器视图之外的小部件或视图之间建立通信。
要设置侦听器,您可以使用此示例作为指导:
interface OnItemsClickListener{
void onItemClick(ScanCodeCardModel scanCodeCardModels);
}
然后在您的适配器中创建一个侦听器变量 class:
private OnItemsClickListener listener = null;
和一个 public 方法,它将像这样处理或监听您的 activity 或片段与 RecycerView 适配器
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)
}
}
});
}
这就是您在适配器中需要做的所有事情 class。 然后继续你的 Fragment 或 Activity class, 并连接到监听器
adapter.setOnItemClickListener(new AdapterName.OnItemClickListener(){
@Override
public void onItemClick(ScanCodeCardModel scanCodeCardModels){
//Set your TextView here when card is Clicked on
textView.setText(scanCodeModels.name)
}
})
仅此而已。