onCreateViewHolder 中的 getAdapterPosition 始终为“-1”

01h*_*nst 5 android android-recyclerview

在许多问题中,人们说“在onCreateViewHolder中调用OnClickListener。您不需要在onBindViewHolder中调用OnClickListener每个项目”

@Override
  public Viewholder onCreateViewHolder(ViewGroup parent, int viewType) {
     View v = LayoutInflater.from(parent.getContext()).inflate(itemLayout, parent, false);
     final ViewHolder holder = new ViewHolder(v);

     holder.itemView.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
             Log.d(TAG, "position = " + holder.getAdapterPosition());
         }
     });
     return new Viewholder(v);
  }

  @Override
  public void onBindViewHolder(final BoardListViewHolder holder, int position) {

  }
Run Code Online (Sandbox Code Playgroud)

但在 Logcat 中,始终显示“position = -1”

这是不正确的。

为什么我应该在 onCreateViewHolder 中调用 onClickListener ?

Int*_*iya 4

\n

onCreateViewHolder 中的 getAdapterPosition 始终为 \xe2\x80\x9c-1\xe2\x80\x9d

\n
\n\n

你应该return holder 代替new Viewholder(v).

\n\n

代码结构

\n\n
@Override\n  public Viewholder onCreateViewHolder(ViewGroup parent, int viewType) {\n     View v = LayoutInflater.from(parent.getContext()).inflate(itemLayout, parent, false);\n     final ViewHolder holder = new ViewHolder(v);\n\n     holder.itemView.setOnClickListener(new View.OnClickListener() {\n         @Override\n         public void onClick(View v) {\n             Log.d(TAG, "position = " + holder.getAdapterPosition());\n         }\n     });\n     return holder;\n  }\n\n  @Override\n  public void onBindViewHolder(final BoardListViewHolder holder, int position) {\n\n  }\n
Run Code Online (Sandbox Code Playgroud)\n