列表视图所选项目滚动到视图外时更改

时间:2012-04-20 07:23:58

标签: java android

我有一个列表视图,其中填充了自定义行。每行都有一些数据和一个圆形图像,点击它就会变成绿色。我基本上想要复制“读取”状态,如“如果圆形图像变为绿色则读取此信息”。我使用了基础适配器来显示屏幕上的视图。我已设法将颜色更改为绿色。

if(messagealertAdapterObject.status!=null && 
   messagealertAdapterObject.equals("read")) {
    select.setImageResource(R.drawable.greencircle);
}else{
    select.setImageResource(R.drawable.gray);
}

但我的问题是,如果我在滚动列表后选择特定行后颜色已变为绿色,则当所选图像退出视图时会返回“未读”状态,如颜色为no一旦它消失了,它就会保持绿色。

是否有一些方法可以让颜色保持绿色,即使“圆圈”离开视图?

2 个答案:

答案 0 :(得分:1)

我相信你的问题与滚动时回收其视图的ListView行为有关。您需要做的是扩展列表适配器并覆盖 getView 方法来处理所选项目的颜色分配。

有关详情,请参阅thisthis

答案 1 :(得分:0)

I have understand your problem.

你需要维护一个布尔arraylist并需要保存那个状态中的所有状态。无论何时滚动列表视图,它都会重新创建其视图,因此您需要保存视图状态。我举一个例子,我认为它会对你有帮助。

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

在你的getView中编写这段代码:

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

每当有人阅读一行时,只需将您的状态保存在itemRead.add(row_position,true)

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