首页 > 学院 > 开发设计 > 正文

修改recyclerview指定位置背景色

2019-11-09 16:29:30
字体:
来源:转载
供稿:网友

这是一个瞎写的小说阅读器,通过点击章节列表(recyclerview)中的选项或者其它方式更新正文文本框内容,并且将章节列表中的相应view设置为红色背景(R.color.colorAccent)。

holder.chapterName是一个文本框,内容为章节名称;

holder.chapterView是holder.chapterName + 一条下划线,基本上算是同一个View

因为改变章节的方式并不只是点击,所以修改方法不在onClick方法里写。

在adapter里添加一个触发修改的方法,由外部调用(getContent方法内包含接口方法,即使点击也一样),将当前章节名称(默认不重复)和该章节在章节列表中的位置传入后再调用notifyItemChanged方法,这样就会触发onBindViewHolder。

在onBindViewHolder里判断recyclerview中的文字内容是否和当前章节名称相同,如果相同就设置为红色背景,并将lastSelectedView设置为这个view;如果不同就设置为天蓝色背景。

在每次触发onBindViewHolder时,当recyclerview中的文字内容和当前章节名称相同,如果lastSelectedView和这个view不是同一个view,说明当前章节变了,需要先把lastSelectedView的背景设置成天蓝色,再将当前view设置为红色背景,将lastSelectedView设置为这个新的view。

ps:在onBindViewHolder里如果根据position而不是章节名来设置的话,会出现这种问题:选中的章节item会变红,但是列表上下滑动会发现还有别的章节item也变红了。

@Override    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.chapter_item, parent, false);        final ViewHolder holder = new ViewHolder(view);        holder.chapterView.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                getContent(holder.getAdapterPosition());                drawerLayout.closeDrawer(GravityCompat.START);            }        });        return holder;    }        public void selectItem(int position, String selectedChapter) {        this.selectedChapter = selectedChapter;        notifyItemChanged(position);    }        PRivate String selectedChapter;    private View lastSelectedView;    @Override    public void onBindViewHolder(ViewHolder holder, int position) {        String chapterName = mNovelInfo.ChapterNameList.get(position);        holder.chapterName.setText(chapterName);        if (chapterName.equals(selectedChapter)) {            if (lastSelectedView != null && lastSelectedView != holder.chapterName) {                lastSelectedView.setBackgroundColor(ContextCompat.getColor(MyUtil.activeActivity, R.color.skyblue));            }            holder.chapterName.setBackgroundColor(ContextCompat.getColor(MyUtil.activeActivity, R.color.colorAccent));            lastSelectedView = holder.chapterName;        } else {            holder.chapterName.setBackgroundColor(ContextCompat.getColor(MyUtil.activeActivity, R.color.skyblue));        }    }


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表