這是一個(gè)瞎寫的小說閱讀器,通過點(diǎn)擊章節(jié)列表(recyclerview)中的選項(xiàng)或者其它方式更新正文文本框內(nèi)容,并且將章節(jié)列表中的相應(yīng)view設(shè)置為紅色背景(R.color.colorAccent)。
holder.chapterName是一個(gè)文本框,內(nèi)容為章節(jié)名稱;
holder.chapterView是holder.chapterName + 一條下劃線,基本上算是同一個(gè)View
因?yàn)楦淖冋鹿?jié)的方式并不只是點(diǎn)擊,所以修改方法不在onClick方法里寫。
在adapter里添加一個(gè)觸發(fā)修改的方法,由外部調(diào)用(getContent方法內(nèi)包含接口方法,即使點(diǎn)擊也一樣),將當(dāng)前章節(jié)名稱(默認(rèn)不重復(fù))和該章節(jié)在章節(jié)列表中的位置傳入后再調(diào)用notifyItemChanged方法,這樣就會觸發(fā)onBindViewHolder。
在onBindViewHolder里判斷recyclerview中的文字內(nèi)容是否和當(dāng)前章節(jié)名稱相同,如果相同就設(shè)置為紅色背景,并將lastSelectedView設(shè)置為這個(gè)view;如果不同就設(shè)置為天藍(lán)色背景。
在每次觸發(fā)onBindViewHolder時(shí),當(dāng)recyclerview中的文字內(nèi)容和當(dāng)前章節(jié)名稱相同,如果lastSelectedView和這個(gè)view不是同一個(gè)view,說明當(dāng)前章節(jié)變了,需要先把lastSelectedView的背景設(shè)置成天藍(lán)色,再將當(dāng)前view設(shè)置為紅色背景,將lastSelectedView設(shè)置為這個(gè)新的view。
ps:在onBindViewHolder里如果根據(jù)position而不是章節(jié)名來設(shè)置的話,會出現(xiàn)這種問題:選中的章節(jié)item會變紅,但是列表上下滑動(dòng)會發(fā)現(xiàn)還有別的章節(jié)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)); } }
新聞熱點(diǎn)
疑難解答