这就是我想做的事情:我希望recyclerview
中的项目在点击一次时突出显示,并在再次点击时恢复正常。
所以我有recyclerview
。我自然也有adapter
。内部适配器是我的viewholder
类,我在onClickListener
上设置了itemview
。
点击它时{I} getTag()
。如果它的值为"false"
,则会突出显示itemview
和setTag("true")
,如果其值为"true"
,则我将itemview
颜色恢复正常并{{1} }}
到目前为止一切正常但现在出现了问题: 当我向上滚动(使项目不在视线范围内)并再次向下时,标签的值似乎也消失了项目的突出显示。
我试过setTag("false")
但是没有工作。
如何在这些项目上保留标签/突出显示?
修改 公共类ViewHolder扩展RecyclerView.ViewHolder实现View.OnClickListener,View.OnLongClickListener {
setIsRecycable(false)
答案 0 :(得分:0)
通过使用适配器中的内部数据集,可以跟踪RecyclerView中的哪些位置已被点击:
public class RVAdapter extends RecyclerView.Adapter<RVAdapter.ViewHolder> {
boolean[] dataset;
public class ViewHolder extends RecyclerView.ViewHolder {
RelativeLayout mRelativeLayout;
public ViewHolder(RelativeLayout v) {
super(v);
mRelativeLayout = v;
}
}
public RVAdapter(boolean[] dataset) {
this.dataset = dataset;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
RelativeLayout v = (RelativeLayout) LayoutInflater.from(parent.getContext())
.inflate(R.layout.rv_item, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.mRelativeLayout.setTag(position);
holder.mRelativeLayout.setEnabled(dataset[position]);
holder.mRelativeLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int position = (int) view.getTag();
dataset[position] = !dataset[position];
}
});
}
@Override
public int getItemCount() {
return dataset.length;
}
}
在此示例中,视图仅启用/禁用,但它说明了如何实现所需。
答案 1 :(得分:0)
解决了!关键是使用SparseBooleanArray而不是标签来跟踪所选项目。在StateListDrawable
的帮助下完成项目的选择