-1

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

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

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

有没有什么方法可以让颜色保持绿色,即使“圆圈”不在视野范围内?

4

2 回答 2

1

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

有关更多信息,请阅读内容和此内容

于 2012-04-20T07:42:08.993 回答
0
I have understand your problem.

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

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

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

于 2012-04-20T08:41:51.863 回答