在我的项目中,我有一个包含最多20个项目的recyclerView。在行模板中,我有一个文本视图和一个最初隐藏的按钮,并在recyclelerview项目上单击该按钮的可见性。问题是当第一行中的按钮被显示并且它被滚动出视图然后向后滚动时按钮再次不可见而不调用toogle visibility.How我可以在滚动时保存回收器视图中的对象状态超出视野
答案 0 :(得分:3)
您的RecyclerView列表项从列表/数组中的对象获取它们的状态,它们基于适配器类使用的对象。
如果要保存已检查状态,可以在对象类中添加一个布尔字段来设置和保存该值,以便在适配器上单击时更新它并相应地设置按钮的可见性。
使用一个简单的对象类来保存String,而不是在ArrayList中使用Strings,而是使用按钮可见性状态的附加布尔值。
这样的课程看起来像这样
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方法时设置它。
希望这有用。
答案 1 :(得分:0)
您可以为此目的使用共享偏好
onRecyclerViewItemClick在共享首选项中插入键值,其中键应该是位置,值应该是true / false
并在您的适配器中实现项目视图创建的条件,如
if(sharedpreferences.contains(String.valueof(position)) && sharedpreferences.getString(String.valueof(position), "").equals("true")){
//button visible
}
else{
// button gone/invisible
}
希望这会对你有所帮助
答案 2 :(得分:0)
使用哈希映射来存储状态。单击按钮时,通过调用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);