Сложность в изменении цвета фона определенной строки в пользовательском списке Android. - PullRequest
0 голосов
/ 29 ноября 2010

Я запутался в изменении цвета фона определенной строки в виде списка, ниже приведен код, который я пробовал. Различные строки выделяются, когда я прокручиваю список, я хотел бы понять причину этого. Логика кажется довольно простой, но результаты непредсказуемы. Как я должен достичь этого.

 @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 Ответ

1 голос
/ 29 ноября 2010

Ваш оператор else не сбрасывает цвет фона на исходный.Метод getView может перерабатывать представление, которое ранее было в вашем списке, но больше не отображается.Если фон был изменен, то он все равно будет тем цветом фона, который был изначально создан, что может зависеть от вашего состояния.

Итак, чтобы «сбросить» это, добавьте следующее в вашем else:

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