难以在Android自定义列表视图中更改特定行的背景颜色

时间:2010-11-29 10:16:45

标签: android listview colors background

我很难改变列表视图中特定行的背景颜色,下面是我尝试过的代码。当我滚动列表时,不同的行会突出显示,我想了解其背后的原因。逻辑似乎很简单,但结果是不可预测的。我该怎么做到这一点。

 @Override
     public View getView(int position, View convertView, ViewGroup parent) {
      ViewHolder holder;
      if (convertView == null) {
             convertView = mInflater.inflate(R.layout.rows_for_layout, null);
             holder = new ViewHolder(); 
             holder.name = (TextView)convertView.findViewById(R.id.name);
             holder.rated=(ImageView)convertView.findViewById(R.id.rated);
              convertView.setTag(holder);   
            }else {
              holder = (ViewHolder) convertView.getTag();
            } 

          //selected_position is the position where the list has to be highlighted  
            if(position==selected_position){
              holder.name.setText(elements.get(position).get("name"));
            convertView.setBackgroundResource(R.drawable.highlight_this);
            holder.rated.setBackgroundResource(R.drawable.star_image);
             }else{
               holder.name.setText(elements.get(position).get("name"));

             }


      return convertView;
     }//getView ![alt text][1]

1 个答案:

答案 0 :(得分:1)

您的其他声明不会将背景颜色重置为原始颜色。 getView方法可以回收先前在列表中但不再可见的视图。如果背景被更改,那么它仍然是最初创建时的背景颜色,这可能取决于您的状态。

所以,为了“重置”它,在你的其他地方添加以下内容:

if(position==selected_position){
          holder.name.setText(elements.get(position).get("name"));
        convertView.setBackgroundResource(R.drawable.highlight_this);
        holder.rated.setBackgroundResource(R.drawable.star_image);
         }else{
           holder.name.setText(elements.get(position).get("name"));
           //Add this
           convertView.setBackgroundResource(R.drawable.not_highlighted);
         }