android - Android 遍历所有 RecyclerView 项目
问题描述
我的应用程序中有一个 RecyclerView,我正在显示的列表项是CardView 内的一个 TextView,当我单击任何显示的 TextView 时,它将是我稍后将使用的选定项。
想法是,如果我点击其中任何一个,持有它的 CardView 应该更改 bgcolor,例如颜色重音。
问题是,一旦我更改了cardview 的bgcolor 之一,那么当我从RecyclerView 单击任何其他TextView 时,我不知道该怎么做。
我正在使用的代码:
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
holder.name.setText(mNames.get(position));
int favIndex = copyDatas.get(position).fieldNames.indexOf("fav");
boolean fav = (boolean) copyDatas.get(position).values.get(favIndex);
if (fav) {
holder.fav.setVisibility(View.VISIBLE);
holder.notfav.setVisibility(View.GONE);
} else {
holder.notfav.setVisibility(View.VISIBLE);
holder.fav.setVisibility(View.GONE);
}
holder.name.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(mContext, "Choosen: " + mNames.get(position), Toast.LENGTH_SHORT).show();
String entity_name = mNames.get(position);
holder.cardView.setCardBackgroundColor(mContext.getColor(R.color.colorAccent));
}
});
}
所以基本上我想做的是:当我点击它们(holder.name.setOnClickListener ...)时,它应该遍历每个 RecyclerView 项目,并将它们的 bgcolor 重置为原色
解决方案
当您更新 a 中的项目时RecyclerAdapter
,您应该使用适配器的notify
方法之一。在您的情况下,您正在跟踪所选项目,当用户选择新项目时,您只需要更新先前选择的项目。
如果你ViewHolder
在你的适配器中,你可以创建一个方法和一个变量来很容易地处理这个问题。
public class MyAdapter {
// keeping track of the currently selected item
private int selected = -1;
public void updateSelectedItem(int position) {
int previous = selected;
selected = position;
// tell the adapter to re-render the two positions to redraw their backgrounds
notifyItemChanged(previous);
notifyItemChanged(selected);
}
public class MyViewHolder {
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
if(selected == position) {
// show a selected background
} else {
// show the normal background
}
holder.name.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// notify the adapter the selected item has changed.
updateSelectedItem(position);
}
});
}
}
}
推荐阅读
- gradle - 使用设置调用 gradle 脚本 build.gradle 是否应该构建调试/发布风格并编写通用任务?
- clips - CLIPS:不是围绕类实例匹配的条件元素
- android - html在android中转换为粗体或斜体跨越字符串
- node.js - SDL2 音频选择输出“通道”
- excel - Excel VBA转PPT,代码随机复制同一张图表
- c# - 生成唯一的排列列表,不包括元素的排序
- facebook - 从旧的 (v2 API) 地点 ID 获取新的 (v3 API) Facebook 地点 ID
- javascript - 如何检测 Angular 4 中的浏览器后退点击
- javascript - 如何提高 ngFor 循环的性能?
- python - PANDAS:将数据帧与公共 ID 结合起来