亚洲城娱乐使用RecyclerView时怎么通过ViewHolder,改变某一个item的外观

( 亚洲城娱乐 )

mAdapter.setOnItemClickListenernew NavAdapter.OnRecyclerViewItemClickListener{
            @Override
            public void onItemClickView view , int position{
                Log.v"mainDebug","position:"+position+"";
                //重置显示效果
                int firstItemPosition=LinearLayoutManagermLayoutManager.findFirstVisibleItemPosition;
                int lastPos = LinearLayoutManagermLayoutManager.findLastVisibleItemPosition;
                System.out.printlnfirstItemPosition+"——"+lastPos;
                forint i=1;i<mAdapter.getItemCount;i++
                {
                    View v=mRecyclerView.getChildAti;
                    NavAdapter.ViewHolder viewHolder=NavAdapter.ViewHoldermRecyclerView.getChildViewHolderv;
                    viewHolder.getmItemText.setTextColorgetResources.getColorR.color.black;
                    viewHolder.getmItemIcon.setImageResourcemAdapter.getNormalIconi - 1;
                }
                //设置选中效果
                View v=mRecyclerView.getChildAtposition;
                NavAdapter.ViewHolder viewHolder=NavAdapter.ViewHoldermRecyclerView.getChildViewHolderv;
                viewHolder.getmItemText.setTextColorgetResources.getColorR.color.mainColor;
                viewHolder.getmItemIcon.setImageResourcemAdapter.getSelectedIconposition - 1;
                //提示重绘
                mAdapter.notifyDataSetChanged;
            }
        };
        

代码如上,我根据点击的position得到View,这一步得到的确实是我说点击的那个view,我已经输出view中的textView内容看过了,没有问题。但是我得到ViewHolder后,去设置文本的颜色,缺发现改变的颜色不是我所点击的那个view的,而是他前面的2个的view的颜色被改变了,不知道该怎么解决。

我是个新手,也刚刚学着用recyclerView,说说自己的看法
按照recyclerview本身的设计意图,单纯改变viewholder的布局是肯定无效的,因为每个viewholder都会在滚动出屏幕后被重用,重用的过程中会调用onBindViewHolder重新给布局设置数据,自然也就变回原样了。
我的想法是,根据item的数量建一个vector或者map,记录每个position的点击状态,在onBindViewHolder中检查表中点击的状态然后设置数据,这样就不会出现错乱的问题。
如果有数据的增改,记得同时也刷新一下vector

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> implements View.OnClickListener{
    Vector<Boolean> vector = new Vector<>;
    List<String> data;
    ItemClickListener listener;
    public MyAdapterList<String> data{
        this.data = data;
        forString string :data{
            vector.addfalse;
        }
    }
    public static class ViewHolder extends RecyclerView.ViewHolder{
        public TextView text;
        public ViewHolderView v{
            superv;
            text = TextView v.findViewByIdR.id.text;
        }
    }
    @Override
    public MyAdapter.ViewHolder onCreateViewHolderViewGroup parent,int viewType{
        View v = LayoutInflater.fromparent.getContext.inflateR.layout.item,parent,false;
        v.setOnClickListenerthis;
        return new ViewHolderv;
    }
    @Override
    public void onBindViewHolderViewHolder holder,int position{
        holder.text.setTextdata.getposition;
        holder.itemView.setTagposition;
        ifvector.getposition{
            holder.text.setTextColorColor.RED;
        }else{
            holder.text.setTextColorColor.BLACK;
        }
    }
    @Override
    public int getItemCount{
        return data.size;
    }
    @Override
    public void onClickView v{
        int position = intv.getTag;
        vector.setposition,!vector.getposition;
        notifyDataSetChanged;
        iflistener != null{
            listener.onItemClickv, position;
        }
    }
    public interface ItemClickListener{
        void onItemClickView v,int position;
    }
    public void setOnClickListenerItemClickListener listener{
        this.listener = listener;
    }
}

你再点击事件里把ViewHolder传出来就好了啊,ViewHolder.itemView就是你Item的布局。。你那个写得太麻烦了

首先,感谢热心为我解答的朋友。后来自己差文档发现notifyItemChangedint position这个方法,会回调onBindViewHolder。所以导致设置的属性被重置了。去掉notifyItemChangedint position这个方法就可以了。

(看完/读完)这篇文章有何感想! 亚洲城娱乐的分享…

发表评论

电子邮件地址不会被公开。 必填项已用*标注