這是一個瞎寫的小說閱讀器,通過點擊章節列表(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)); } }
新聞熱點
疑難解答