最近在使用recycleview的时候被这个问题困扰好几天了,recycleview.adapter代码如下:
private class MyRecycleViewAdapter extends RecyclerView.Adapter<MyRecycleViewAdapter.ViewHolder> {
private MyRecycleViewAdapter.ViewHolder viewHolder=null;
@Override
public MyRecycleViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(getActivity()).inflate( R.layout.device_tmperature,parent,false);
viewHolder = new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Log.e(TAG, "onBindView position " + position+" suppose to be seen "+holder.getLayoutPosition()+" ℃" );
viewHolder.degree.setText(holder.getLayoutPosition()+" ℃");
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemCount() {
return 10;
}
@Override
public void onViewAttachedToWindow(ViewHolder holder) {
Log.e(TAG, "onViewAttachedToWindow position " + holder.getLayoutPosition()+" suppose to be seen "+holder.getLayoutPosition()+" ℃" );
viewHolder.degree.setText(holder.getLayoutPosition()+" ℃");
}
public class ViewHolder extends RecyclerView.ViewHolder{
TextView degree = null;
CardView cv_device=null;
public ViewHolder(View itemView) {
super(itemView);
degree= (TextView) itemView.findViewById(R.id.tv_degree);
cv_device = (CardView) itemView.findViewById(R.id.cv_device);
cv_device.setCardElevation(5);
cv_device.setRadius(5);
}
}
}
一开始显示的时候没有问题,但是当我往下滑动到position=4的时候显示的内容就开始混乱了。通过LOG打印出的信息发现是因为当我滑到position=5本应该显示的时候onBindViewHolder和onViewAttachedToWindow提供的viewholder还是position=4的,所以本应该position=5显示“6℃”的时候却变成position=4显示了。已经在在这个问题纠结好几天了有人能帮忙解决吗?谢谢了