为什么不创建类的对象就可以直接访问holder.textView?

时间:2018-11-08 17:33:45

标签: java android

我有这个适配器类:

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?如何在不创建类的对象的情况下访问字段?

1 个答案:

答案 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是一个实例。这不是静态参考。