Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何在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 @R_965_10586@l number of items in the data set hold by the adapter.
     *
     * @return The @R_965_10586@l number of items in this adapter.
     */
    @Override
    public int getItemCount() {
        return tableList.size();
    }

}

解决方法

RecyclerView.adapter有两个重要的功能来覆盖:
onCreateViewHolder(parent,viewTypE)
onBindVIewHolder(viewholder,position)

一个函数用于扩充将在recyclelerview中使用的视图,第二个函数用于将您拥有的数据绑定到此视图,从而在视图上设置正确的视图状态.

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

大佬总结

以上是大佬教程为你收集整理的如何在Android中的RecyclerView中跟踪所选项目?全部内容,希望文章能够帮你解决如何在Android中的RecyclerView中跟踪所选项目?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。