ListView按钮行为异常-Android

ListView按钮行为异常-Android,android,listview,android-button,Android,Listview,Android Button,我有每个ListView项目的按钮。每个按钮都以绿色或灰色开头,具体取决于JSON数组。如果按钮开始为绿色,则单击后将变为灰色。如果按钮单击后开始变为灰色,它将变为绿色。问题是,当我向上滚动并离开按钮的视图,然后返回到按钮时,它已返回其原始颜色。这是我的按钮代码 if(p.JSONarray().equals("NO")){ 按钮。setBackgroundResource(R.可绘制。灰色) 为什么按钮离开视图后会返回其原始颜色?由于视图再次创建,因此颜色会变回默认值。您需要维护一个已单击的

我有每个ListView项目的按钮。每个按钮都以绿色或灰色开头,具体取决于JSON数组。如果按钮开始为绿色,则单击后将变为灰色。如果按钮单击后开始变为灰色,它将变为绿色。问题是,当我向上滚动并离开按钮的视图,然后返回到按钮时,它已返回其原始颜色。这是我的按钮代码

if(p.JSONarray().equals("NO")){
按钮。setBackgroundResource(R.可绘制。灰色)


为什么按钮离开视图后会返回其原始颜色?

由于视图再次创建,因此颜色会变回默认值。您需要维护一个已单击的按钮位置列表,以便当您在
getView
中再次到达该位置时,可以更改按钮的颜色,因为视图再次创建,因此颜色会更改回默认值。您需要维护已单击的
按钮
位置列表,以便当您在
getView
中再次到达该位置时,可以更改按钮的颜色

您需要设置一个else条件来维护按钮的颜色。 在您的情况下,您的代码应该如下所示:

            if(p.JSONarray().equals("YES")){

                 button.setBackgroundResource(R.drawable.green);

                 button.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View button) {


                    button.setBackgroundResource(R.drawable.gray);


                }//end on click
            });

            }else
            {
                    button.setBackgroundResource(R.drawable.gray);
            }

您需要设置else条件以保持按钮的颜色。 在您的情况下,您的代码应该如下所示:

            if(p.JSONarray().equals("YES")){

                 button.setBackgroundResource(R.drawable.green);

                 button.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View button) {


                    button.setBackgroundResource(R.drawable.gray);


                }//end on click
            });

            }else
            {
                    button.setBackgroundResource(R.drawable.gray);
            }

如何列出按钮位置?如何列出按钮位置?请参阅此处的答案:请参阅此处的答案: