如何在Android的RecyclerView中跟踪所选项目?

海绵老板

如何与达成一致的项目选择RecyclerView我有RecyclerView回收旧视图的全部想法,而没有。我的问题是我有一个项目列表,每个项目上都有一个图标,单击某个项目时,图标会更改颜色。我设法实现了所有这些目标,但是我只是意识到,当我向下滚动列表时,其他项目的图标也发生了变化,当我滚动回到我单击的项目时,该图标不再位于“单击的项目”中。颜色”。

有谁知道如何跟踪所选项目?我一直看到称为的东西SparseBooleanArray,但不确定如何实现它。

这是我的适配器代码:

public class TableRVAdapter extends RecyclerView.Adapter<TableRVAdapter.TableHolder> {

    List<Tables> tableList;
    private SparseBooleanArray selectedItems;

    public TableRVAdapter(List<Tables> tableList)
    {
        this.tableList = tableList;
        selectedItems = new SparseBooleanArray();
       // setHasStableIds(true);
    }
    class TableHolder extends RecyclerView.ViewHolder
    {
        TextView tableTV;
        CardView tableCV;
        View circle;
        View parentView;
        TableHolder(final View itemView)
        {
            super(itemView);
            tableTV = (TextView)itemView.findViewById(R.id.tableTV);
            tableCV = (CardView)itemView.findViewById(R.id.tableCV);
            circle = itemView.findViewById(R.id.statusCircle);
            itemView.setClickable(true);
            parentView = itemView;

            tableCV.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                     circle.setBackgroundResource(R.drawable.circle);

                }
            });
        }
        /*
        @Override
        public void onClick(View view) {
            if (selectedItems.get(getAdapterPosition(), false)) {
                tableCV.setSelected(false);
                circle.setBackgroundResource(R.drawable.circle2);
            }
            else {
                selectedItems.put(getAdapterPosition(), true);
                tableCV.setSelected(true);
                circle.setBackgroundResource(R.drawable.circle);
            }

        }*/
    }

    @Override
    public TableHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.table_item,parent,false);
        TableHolder tableHolder = new TableHolder(view);
        return tableHolder;
    }

    @Override
    public void onAttachedToRecyclerView(RecyclerView recyclerView)
    {
        super.onAttachedToRecyclerView(recyclerView);
    }


    @Override
    public void onBindViewHolder(TableHolder holder, int position) {
        holder.tableTV.setText(tableList.get(position).getTableNumber());

    }

    /**
     * Returns the total number of items in the data set hold by the adapter.
     *
     * @return The total number of items in this adapter.
     */
    @Override
    public int getItemCount() {
        return tableList.size();
    }

}
胸肌

RecyclerView.adapter有两个重要的功能需要重写:

onCreateViewHolder(parent, viewType)
onBindVIewHolder(viewholder, position)

第一个函数用于为将在recyclerview中使用的视图充气,第二个函数用于将您拥有的数据绑定到该视图,从而在视图上设置正确的视图状态。

recyclerview本身只会膨胀一定数量的视图,然后将开始重新使用已经膨胀的视图(因此recyclerview)。因此,您需要为onBindViewholder()中的每个项目设置正确的状态,并在该位置上的集合中使用该项目来设置正确的viewState。对于您的示例:根据对象中的布尔值更改图标的颜色,例如:isPressed

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章