Java 列表视图所选项目在滚动出视图时发生更改

Java 列表视图所选项目在滚动出视图时发生更改,java,android,Java,Android,我有一个用自定义行填充的列表视图。每行都有一些数据和一个圆形图像,单击该图像会变为绿色。我基本上想复制一个“读取”状态,如“如果圆圈图像变为绿色,则读取此消息”。我使用了一个基本适配器在屏幕上显示视图。我已设法把颜色改成绿色 if(messagealertAdapterObject.status!=null && messagealertAdapterObject.equals("read")) { select.setImageResource(R.drawab

我有一个用自定义行填充的列表视图。每行都有一些数据和一个圆形图像,单击该图像会变为绿色。我基本上想复制一个“读取”状态,如“如果圆圈图像变为绿色,则读取此消息”。我使用了一个基本适配器在屏幕上显示视图。我已设法把颜色改成绿色

if(messagealertAdapterObject.status!=null && 
   messagealertAdapterObject.equals("read")) {
    select.setImageResource(R.drawable.greencircle);
}else{
    select.setImageResource(R.drawable.gray);
}
但我的问题是,如果我滚动列表,在选择特定行后颜色变为绿色,当所选图像离开视图时,它会返回到“未读”状态,因为颜色在离开视图后不再保持绿色


是否有某种方法可以使颜色在“圆圈”离开视图时保持绿色?

我认为您的问题在于滚动时ListView回收视图的行为。您需要做的是扩展列表适配器并重写getView方法来处理所选项目的颜色分配

欲了解更多信息,请阅读和

您需要维护一个布尔数组列表,并需要保存该列表中的所有状态。每当您滚动listview时,它都会重新创建其视图,因此您需要保存视图的状态。我举一个例子,我认为这会帮助你

//maintain a listview in your custom adapter:

private ArrayList<Boolean> itemRead      = null;

//initialize it in your custom adapter constructor:

   for (int i=0; i < no_of_elements.size(); i++)
   {
        itemRead.add(i, false);
   }
每当有人读取一行时,只需将您的状态保存在itemRead.add(row\u position,true)中

这将解决您的问题,因为每次重新创建视图时,它都会采用保存状态并根据该状态设置图像。
希望它能起作用。

你好,Pradeep,在提出问题之前,你应该做一些研究,寻找类似的问题。
//maintain a listview in your custom adapter:

private ArrayList<Boolean> itemRead      = null;

//initialize it in your custom adapter constructor:

   for (int i=0; i < no_of_elements.size(); i++)
   {
        itemRead.add(i, false);
   }
public View getView (int position, View convertView, ViewGroup parent)
{
     //WRITE YOUR CODE

     if (itemRead.get(position) == true)
     {
         //SET YOUR ALREADY READ IMAGE
     } else {
        // SET UNREAD IMAGE
     }
}