滚动出视图时在 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);
在我的项目中,我有一个最多包含 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);