这是一个瞎写的小说阅读器,通过点击章节列表(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)); } }
新闻热点
疑难解答