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

如何在Android中的RecyclerView中跟踪所选项目?,第1张

概述如何使用RecyclerView实现一致的项目选择?我完全了解RecyclerView回收旧视图和什么不是.我的问题是我有一个项目列表,每个项目上都有一个图标,当点击一个项目时,图标会改变颜色.我设法实现了所有这一切,但我刚刚意识到,当我向下滚动列表时,其他项目的图标也发生了变化,当我滚动回到我点击的项目时,图标不再出现在“点击”中颜色”. 有谁知道如何跟踪所选项目?我一直在看一些名为Sparse 如何使用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)

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

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

总结

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

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

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1140889.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存