recycleview onBindView& onViewAttachedToWindow重复混淆

时间:2015-12-12 03:40:54

标签: android android-viewholder

以下是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);
        }
    }
}

首先,它是正确的,但是当我向下滑动时,它在位置4处显示“6℃”,而它应该是“5℃”。以下内容也很混乱。

1 个答案:

答案 0 :(得分:0)

好的,我把它解决了。它应该使用持有者而不是观察者。