在recyclerview中单击新提要时,如何取消/取消突出显示旧提要?

时间:2019-04-04 15:53:03

标签: android android-recyclerview android-viewholder

在我的应用程序中,用户可以选择一种音乐类型,然后显示该特定类型的音乐。音乐类别显示在水平的回收站视图中。选择一个类别后,该特定类别将突出显示。现在,我想要一个代码,其中突出显示最新的提要/类别,同时取消突出显示较旧的提要/类别。

现在,我可以使用存储所选择的提要位置的静态整数(例如categoryPosition)来跟踪旧的选定提要。 现在,当我在最新提要的itemView中时,我找不到使用categoryPosition跟踪旧提要并取消突出显示它的方法。

以下是一些相关的代码:

@Override
            protected void populateViewHolder(final CategoryViewHolder viewHolder, final CategoryBlog model, final int position) {

//some other code

viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {



                           //UNHIGHLIGHTING OLD FEED WITH categoryPosition  WHERE I NEED HELP.

                           categoryPosition = position; //set categoryPosition  to newly selected feed.


                        if(model.getName().equals(categorykey))
                        {
                            //highlightening part which I have done successfully
                        }



                    }
                });

1 个答案:

答案 0 :(得分:1)

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let dataIndex = indexPath.row - 1 guard let cell1 = tableView.dequeueReusableCell(withIdentifier: "cell1") else {return UITableViewCell()} func generateRandomColor() -> UIColor { let redValue = CGFloat(drand48()) let greenValue = CGFloat(drand48()) let blueValue = CGFloat(drand48()) let randomColor = UIColor(red: redValue, green: greenValue, blue: blueValue, alpha: 1.0) return randomColor } if indexPath.row == 0 { if tableViewData[indexPath.section].opened == false { tableViewData[indexPath.section].opened = false cell1.textLabel?.text = tableViewData[indexPath.section].title cell1.textLabel?.numberOfLines = 0 cell1.textLabel?.lineBreakMode = NSLineBreakMode.byWordWrapping cell1.textLabel?.font = UIFont.systemFont(ofSize: 18) cell1.backgroundColor = UIColor.clear return cell1 } else if tableViewData[indexPath.section].opened == true { tableViewData[indexPath.section].opened = true cell1.textLabel?.text = tableViewData[indexPath.section].title cell1.textLabel?.numberOfLines = 0 cell1.textLabel?.lineBreakMode = NSLineBreakMode.byWordWrapping cell1.textLabel?.font = UIFont.boldSystemFont(ofSize: 25) cell1.backgroundColor = generateRandomColor() return cell1 } return cell1 } else { cell1.textLabel?.text = tableViewData[indexPath.section].sectionData[dataIndex] cell1.textLabel?.numberOfLines = 0 cell1.textLabel?.lineBreakMode = NSLineBreakMode.byWordWrapping cell1.textLabel?.font = UIFont.systemFont(ofSize: 18) cell1.backgroundColor = generateRandomColor() return cell1 } } 具有一种称为findviewbyposition的方法,该方法将为您提供与LinearLayoutManager关联的视图,您可以使用该视图取消突出显示该条目。但是请记住,未选择的视图可能不会布局,因此返回值将为categoryPosition