滚动后无法获取itemview的标签()

时间:2017-03-04 00:07:24

标签: android android-recyclerview android-viewholder

这就是我想做的事情:我希望recyclerview中的项目在点击一次时突出显示,并在再次点击时恢复正常。

所以我有recyclerview。我自然也有adapter。内部适配器是我的viewholder类,我在onClickListener上设置了itemview

点击它时{I} getTag()。如果它的值为"false",则会突出显示itemviewsetTag("true"),如果其值为"true",则我将itemview颜色恢复正常并{{1} }}

到目前为止一切正常但现在出现了问题: 当我向上滚动(使项目不在视线范围内)并再次向下时,标签的值似乎也消失了项目的突出显示。

我试过setTag("false")但是没有工作。

如何在这些项目上保留标签/突出显示?

修改 公共类ViewHolder扩展RecyclerView.ViewHolder实现View.OnClickListener,View.OnLongClickListener {

setIsRecycable(false)

2 个答案:

答案 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

的帮助下完成项目的选择

how to highlight the selected Item of Recycler View?