如何访问并修改RecyclerView中指定位置按钮的背景色?
解决方案
方案1:数据源驱动更新(推荐,适配回收复用机制)
这种方式不会因为RecyclerView的item回收复用出现样式错乱,是最稳妥的实现方式:
- 第一步:给你的
Mixmatchclass数据类新增高亮标记字段
public class Mixmatchclass { // 原有字段 private String statement; private int id; // 新增字段,标记是否需要高亮背景 private boolean isNeedHighlight = false; // 原有构造方法 public Mixmatchclass(String statement, int id) { this.statement = statement; this.id = id; } // 新增get、set方法 public boolean isNeedHighlight() { return isNeedHighlight; } public void setNeedHighlight(boolean needHighlight) { isNeedHighlight = needHighlight; } // 原有getter方法保留 public String getStatement() { return statement; } }
- 第二步:修改适配器的
onBindViewHolder逻辑,根据标记设置按钮背景
@Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { holder.mainbutton.setText(datalist.get(position).getStatement()); // 新增背景设置逻辑 if (datalist.get(position).isNeedHighlight()) { // 需要高亮的背景,替换成你自己的颜色/背景资源 holder.mainbutton.setBackgroundColor(Color.RED); } else { // 普通状态的默认背景,必须写这个避免item复用导致的样式错乱 holder.mainbutton.setBackgroundColor(Color.WHITE); } }
- 第三步:在Fragment中需要修改指定位置按钮背景时,更新数据源后通知适配器刷新即可
首先修改Fragment中适配器初始化的代码,把适配器实例存为全局变量:
// 将原来的recyclerView.setAdapter(new mixandmatchadapter(datalist,getActivity()));替换为以下代码 mixandmatchadapter = new mixandmatchadapter(datalist,getActivity()); recyclerView.setAdapter(mixandmatchadapter);
比如你要修改位置5的按钮,执行以下代码即可:
// 注意RecyclerView的位置从0开始计数,如果是视觉上第5个item对应位置是4,可根据需求调整数值 int targetPosition = 5; if (targetPosition < datalist.size()) { datalist.get(targetPosition).setNeedHighlight(true); // 只刷新指定位置,性能更高 mixandmatchadapter.notifyItemChanged(targetPosition); }
方案2:直接获取ViewHolder(仅适用于目标item当前在屏幕可视范围内的场景)
如果你的目标item当前肯定展示在屏幕上,不需要考虑滑出屏幕的情况,可以直接通过RecyclerView获取对应位置的ViewHolder修改样式:
int targetPosition = 5; RecyclerView.ViewHolder viewHolder = recyclerView.findViewHolderForAdapterPosition(targetPosition); if (viewHolder instanceof mixandmatchadapter.ViewHolder) { Button targetBtn = ((mixandmatchadapter.ViewHolder) viewHolder).mainbutton; targetBtn.setBackgroundColor(Color.RED); }
注意:如果目标item已经滑出屏幕,这个方法会返回null,修改不会生效,而且item滑回屏幕时样式会被
onBindViewHolder的逻辑重置,所以优先选择方案1。
内容的提问来源于stack exchange,提问作者Priyanshu Pundhir
相关产品推荐
相关产品推荐

