在使用getBindingAdapterPosition时,需要注意它只能在ViewHolder绑定数据之后才能正确返回位置信息。因此,在调用getBindingAdapterPosition之前,需要确保ViewHolder已经绑定了相应的数据。
示例代码:
public class MyAdapter extends RecyclerView.Adapter
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// create a new view
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.my_layout, parent, false);
MyViewHolder vh = new MyViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
// bind data to ViewHolder
holder.bindData(position);
}
public static class MyViewHolder extends RecyclerView.ViewHolder {
private TextView tv;
public MyViewHolder(View itemView) {
super(itemView);
tv = itemView.findViewById(R.id.tv);
}
public void bindData(int position) {
// set data to views
tv.setText("Item " + position);
}
}
public void onItemClick() {
// get adapter position
int position = myViewHolder.getBindingAdapterPosition();
if(position != RecyclerView.NO_POSITION) {
// do something with position
Log.d("TAG", "Clicked item at position " + position);
}
}
}