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

Android 滚动出视图时在recyclerview中保存项目的状态,android,android-recyclerview,Android,Android Recyclerview,在我的项目中,我有一个最多包含20项的recyclerView。在行模板中,我有一个文本视图和一个按钮,该按钮最初是隐藏的,在recyclerview项上单击按钮,按钮的可见性被切换。问题是当显示第一行中的按钮时,如果将其从视图中滚出,然后再向后滚回,则该按钮在不调用Togle visibility的情况下再次不可见。在将其从视图中滚出时,如何在recycler视图中保存对象的状态 在RecycleServiceItem上,单击“在共享首选项中插入键值”,其中键应为位置,值应为真/假 并且在适配

在我的项目中,我有一个最多包含20项的recyclerView。在行模板中,我有一个文本视图和一个按钮,该按钮最初是隐藏的,在recyclerview项上单击按钮,按钮的可见性被切换。问题是当显示第一行中的按钮时,如果将其从视图中滚出,然后再向后滚回,则该按钮在不调用Togle visibility的情况下再次不可见。在将其从视图中滚出时,如何在recycler视图中保存对象的状态

在RecycleServiceItem上,单击“在共享首选项中插入键值”,其中键应为位置,值应为真/假

并且在适配器中实现if条件,其中创建的项视图如下

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

//button visible

}

else{
 // button gone/invisible
}

希望这能帮助您

您的RecyclerView列表项从列表/数组中的对象获取它们的状态,它们基于适配器类使用的对象

如果要保存选中状态,可以在对象类中添加一个布尔字段来设置并保留该值,以便适配器在单击时更新该值,并相应地设置按钮的可见性

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

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

        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方法时进行设置


希望这有帮助。

使用哈希映射来存储状态。单击按钮时,hashmap将通过调用
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,int位置)

通过这个位置

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

adapter.notifyDataSetChanged()用于通知任何已注册的观察者数据集已更改。根据官方文档,它不用于保存任何状态。你可以在@sony上读到更多,你在这一点上是对的。我更新了我的答案请看一看谢谢分享偏好的想法。我使用哈希映射来存储状态。谢谢你的timesir我想知道答案,我也创建并设置按钮可见性,但每当活动重新启动时,我们都需要再次设置可见性。我想实现你的答案,但不知道如何实现。这是我的问题和适配器类。你能帮忙吗:我没有使用任何对象类。我只是使用数组列表。什么的数组列表?字符串数组,只是为了填充行。我使用哈希映射来存储状态。谢谢你的时间嘿,我想实现同样的功能,但是出错了。你能回答我的问题吗,我的适配器类上传到那里了