当滚动出视图时,ListView图像会更改回原始设置-Android
我有一个包含多个ListView项的ListView。ListView项目布局包含一个ImageView。我将此ImageView用作按钮。单击按钮时,会将ImageView从灰色图像更改为绿色图像。但当我将ImageView从可见视图中滚动出来,然后再返回到它时,它会返回到其原始颜色。创建ImageView时,它可以是绿色或灰色,这取决于JSON数组。所以,如果一个图像是绿色的,点击它就会变成灰色。然后,当它离开可见视图并返回可见视图时,它再次变为绿色!如何使图像保持其新状态 这是我的密码当滚动出视图时,ListView图像会更改回原始设置-Android,android,listview,android-listview,Android,Listview,Android Listview,我有一个包含多个ListView项的ListView。ListView项目布局包含一个ImageView。我将此ImageView用作按钮。单击按钮时,会将ImageView从灰色图像更改为绿色图像。但当我将ImageView从可见视图中滚动出来,然后再返回到它时,它会返回到其原始颜色。创建ImageView时,它可以是绿色或灰色,这取决于JSON数组。所以,如果一个图像是绿色的,点击它就会变成灰色。然后,当它离开可见视图并返回可见视图时,它再次变为绿色!如何使图像保持其新状态 这是我的密码 i
if(p.getJSON().equals("NO")){
imageView.setBackgroundResource(R.drawable.gray);
imageView.setTag(0);
}//end if equals NO
if(p.getJSON().equals("YES")){
imageView.setClickable(false);
imageView.setBackgroundResource(R.drawable.green);
imageView.setTag(1);
}//end if equals yes
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View imageView) {
final int status = (Integer) imageView.getTag();
if (status == 0){
imageView.setBackgroundResource(R.drawable.green);
imageView.setTag(1);
}
else{
imageView.setBackgroundResource(R.drawable.gray);
imageView.setTag(0);
}
}//end on click
});
您需要为已按按钮修改的项保留状态,然后在为该项调用适配器的
getView()
时恢复该状态
有很多方法可以做到这一点:在内存、数据库等中。您必须选择最适合您的方法
i、 e.-点击第3项,图像从灰色变为绿色,存储一些东西来表示图像的状态(灰色与绿色,对于这种情况,布尔值很好),然后将数据保存到某个地方。然后,当为项目3再次调用getView()
时(即将再次显示),您可以根据为项目3保留的数据设置图像的颜色
您可以只修改原始
JSONArray
中支持列表视图的值,顺便说一句。此行为的原因是您没有持久化项目的状态(如果单击或未单击)。每次滚动列表时,都会调用getView()
,并执行以下代码并重置状态:
if(p.getJSON().equals("NO") ){
imageView.setBackgroundResource(R.drawable.gray);
imageView.setTag(0);
}//end if equals NO
if(p.getJSON().equals("YES")){
imageView.setClickable(false);
imageView.setBackgroundResource(R.drawable.green);
imageView.setTag(1);
}//end if equals yes
所需要的是一种根据每个项目的位置跟踪其状态的方法。所以您可以自信地告诉我:位于k
位置的项目是“是”
或“否”
您需要跟踪已单击的项,以便在调用getView()时,可以根据当前值(而不是JSON值)更新的状态
1) 维护已检查项目位置的地图,以及相应的状态值(“YES”
或“NO”
)
2) 如果单击项目,则将其(位置、新状态)添加到地图中。如果再次单击,请在地图中更新其状态
3) 使用此映射并在getView()
中设置项目的状态,类似于:
私人领域:
HashMap<Integer, String> map = new HashMap<Integer, String>();
注意:这只是得到你想要的东西的众多方法之一,但是基本想法应该是一样的。谢谢你的回答!我以前听过,你解释得比其他人都好。但是我如何更改原始JSONArray的值呢。。。可能说得有点太快了。我不确定能不能做到。。。很容易。无论如何,我会将数据从JSONArray
移动到ArrayList
或其他地方,然后您可以非常轻松地修改ArrayList
的元素。您的JSONArray
中有什么?如何获得p
?你能从一开始就发布getView()
吗?
String state = p.getJSON();
if(map.containsKey(position)) {
state = map.get(position);
}
if(state.equals("NO") ){
imageView.setBackgroundResource(R.drawable.gray);
imageView.setTag(0);
}//end if equals NO
if(state.equals("YES")){
imageView.setClickable(false);
imageView.setBackgroundResource(R.drawable.green);
imageView.setTag(1);
}//end if equals yes
final int pos = position;
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View imageView) {
final int status = (Integer) imageView.getTag();
if (status == 0){
imageView.setBackgroundResource(R.drawable.green);
imageView.setTag(1);
map.put(pos, "YES")
}
else {
imageView.setBackgroundResource(R.drawable.gray);
imageView.setTag(0);
map.put(pos, "NO")
}
}//end on click
});