调用getAdapterPosition可能会出现空指针异常,因为ViewHolder可能仍然是“未绑定”状态(例如,在RecyclerView的Adapter.notifyItemRemoved之后)。此时,getAdapterPosition将返回RecyclerView.NO_POSITION。
要保证调用getAdapterPosition的正常运行,需要在ViewHolder中处理从Adapter中接收到的任何事件(例如,点击事件)之前,调用ViewHolder.getAdapterPosition() 方法。示例代码如下:
public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { TextView textView;
public MyViewHolder(View itemView) {
super(itemView);
textView = (TextView) itemView.findViewById(R.id.text);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION) {
// handle item click
}
}
}
此方法可确保正确获取ViewHolder的位置,从而避免空指针异常。