滚动出视图时在 recyclerview 中保存项目的状态

save state of an item in recyclerview when scrolled out of the view

在我的项目中,我有一个最多包含 20 个项目的 recyclerView。在行模板中,我有一个文本视图和一个最初隐藏的按钮,在 recyclerview 项目上单击按钮的可见性。问题是当显示第一行中的按钮时,如果它被滚出视图然后向后滚动,则按钮在不调用 toogle 的情况下再次不可见 visibility.How 我可以在回收器视图中保存对象的状态吗滚出视图

您可以为此目的使用共享首选项

onRecyclerViewItemClick 在共享首选项中插入键值,其中键应为位置,值应为 true/false

并在您的适配器中实施 if 条件,其中项目视图创建如

if(sharedpreferences.contains(String.valueof(position)) && sharedpreferences.getString(String.valueof(position), "").equals("true")){

//button visible

}

else{
 // button gone/invisible
}

希望对您有所帮助

您的 RecyclerView 列表项从 List/Array 中的对象获取它们的状态,它们基于您的适配器 class 使用的对象。

如果您想保存选中状态,您可以向您的对象添加一个布尔字段 class 以设置并保存该值,这样当您的适配器在单击时更新它并设置按钮的可见性因此。

不要在 ArrayList 中使用字符串,而是使用一个简单的对象 class 来保存字符串和按钮可见性状态的附加布尔值。

这样的 class 可能看起来像这样

        class Items {
        String myString;
        boolean visibility;

        public String getMyString(){
            return myString;
        }

        public boolean isVisible(){
            return visibility;
        }

        public void setVisibility(boolean visibility){
            this.visibility = visibility;
        }
    }

在您的 RecyclerView 中,您将有一个方法来设置列表项的值,我从未使用过它,但我相信它叫做 bindView?在此处设置列表项的文本值的同时,还根据 item.getVisibility() 返回的值设置可见性,并在调用按钮的 onClick 方法时进行设置。

希望这对您有所帮助。

使用哈希映射来存储状态。单击按钮时,通过调用 getPosition() 和可见性

更新散列图的位置
 public void onClick(View v) {
                Btn.setVisibility(Btn.getVisibility() == View.VISIBLE ? View.GONE : View.VISIBLE);
                statesMap.put(getPosition(),Btn.getVisibility() == View.VISIBLE );
            }

然后从

中的散列映射中读取值

onBindViewHolder(MyViewHolder holder, int position)

通过位置

holder.Btn.setVisibility(statesMap.get(position) != null && statesMap.get(position) != false ? View.VISIBLE : View.GONE);