Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当滚动出视图时,ListView图像会更改回原始设置-Android_Android_Listview_Android Listview - Fatal编程技术网

当滚动出视图时,ListView图像会更改回原始设置-Android

当滚动出视图时,ListView图像会更改回原始设置-Android,android,listview,android-listview,Android,Listview,Android Listview,我有一个包含多个ListView项的ListView。ListView项目布局包含一个ImageView。我将此ImageView用作按钮。单击按钮时,会将ImageView从灰色图像更改为绿色图像。但当我将ImageView从可见视图中滚动出来,然后再返回到它时,它会返回到其原始颜色。创建ImageView时,它可以是绿色或灰色,这取决于JSON数组。所以,如果一个图像是绿色的,点击它就会变成灰色。然后,当它离开可见视图并返回可见视图时,它再次变为绿色!如何使图像保持其新状态 这是我的密码 i

我有一个包含多个ListView项的ListView。ListView项目布局包含一个ImageView。我将此ImageView用作按钮。单击按钮时,会将ImageView从灰色图像更改为绿色图像。但当我将ImageView从可见视图中滚动出来,然后再返回到它时,它会返回到其原始颜色。创建ImageView时,它可以是绿色或灰色,这取决于JSON数组。所以,如果一个图像是绿色的,点击它就会变成灰色。然后,当它离开可见视图并返回可见视图时,它再次变为绿色!如何使图像保持其新状态

这是我的密码

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
});