我有这个适配器类:
public class ItemAdapter extends PagedListAdapter<Item, ItemAdapter.ItemViewHolder> {
private Context context;
ItemAdapter(Context context) {
this.context = context;
}
@NonNull
@Override
public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.item, parent, false);
return new ItemViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) {
Item item = getItem(position);
holder.textView.setText(item.name); //Why?!?!
}
class ItemViewHolder extends RecyclerView.ViewHolder {
TextView textView;
ItemViewHolder(View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.name_text_view);
}
}
}
在onBindViewHolder()
方法内部,由于holder.textView
不是静态的,为什么我可以直接访问ItemViewHolder
?如何在不创建类的对象的情况下访问字段?
答案 0 :(得分:0)
仅仅因为您没有创建一个实例(您称之为“对象”)并不意味着您没有使用一个实例。实际上,您在onCreateViewHolder()
方法中 did 创建了ItemViewHolder的实例:
@NonNull
@Override
public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.item, parent, false);
return new ItemViewHolder(view); //right here
}
由onCreateViewHolder()
返回的实例是传递给onBindViewHolder()
的对象(对于数据集中的每个项目都调用onCreateViewHolder()
和onBindViewHolder()
,所以有一个独特的实例每个项目的ItemViewHolder [RecyclerViews实际上是回收ViewHolders,但这是另一个主题]。
ItemViewHolder.textView
无效,因为 是静态访问的示例。
不过,您所指的是实际实例。
TL; DR,holder
是一个实例。这不是静态参考。