Android: первый список элементов выглядит странно - PullRequest
4 голосов
/ 25 ноября 2011

В моем приложении для Android у меня есть ListView с 5 элементами.Я создал собственный адаптер, чтобы изменить фон некоторых элементов listView.Например, второй элемент представления списка еще не готов, поэтому я хочу набрать setBackground(Color.Gray), чтобы он выглядел так, как будто это еще не сделано.Чтобы сделать это, я переопределил метод getView () из ArrayAdapter в моем настраиваемом адаптере следующим образом:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = super.getView(position, convertView, parent); 
    if(!itensAvailable[position]) v.setBackgroundColor(Color.Gray);
    return v;
}

Странная вещь, независимо от того, использую ли я логический itensAvailable[position] или !itensAvailable[position] первый элемент списка всегда имеет измененный фон!Все остальные элементы списка ведут себя так, как ожидалось, кроме первого.Более странно, если я сделаю if(position == 2) v.setBackgroundColor(Color.Gray);

, это изменит фон с предмета в позиции 2, а также с первым предметом!Если я сделаю

if(position == 2) {
v.setBackgroundColor(Color.Gray);
System.out.println(v.getText());
}

Еще более странно!Только текст из позиции 2 печатается, а не текст из первого пункта.

Что происходит?Ошибка Android?Кстати, я тестирую его на устройстве XOOM 3.2 Honeycomb.

И, очевидно, если я прокомментирую это, если код, у первого элемента не изменился фон.

Ответы [ 3 ]

2 голосов
/ 25 ноября 2011

Это очень странно! Что произойдет, если вы напишите:

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = super.getView(position, convertView, parent); 
        if(!itensAvailable[position]) v.setBackgroundColor(Color.Gray);
        else v.setBackgroundColor(Color.Transparent);
        return v;
    }
0 голосов
/ 17 октября 2015

У меня точно такая же проблема.Странно, действительно!

Мне удалось удалить строку

View v = super.getView(position, convertView, parent); 

и использовать вместо нее -

LayoutInflater inflater = LayoutInflater.from(getContext());
View v = inflater.inflate(R.layout.__my__layout__, parent, false);
.... more view manipulations ....

надеюсь, это поможет!

0 голосов
/ 25 ноября 2011

Я не могу объяснить странное поведение. Можете ли вы попробовать следующий код и посмотреть, решит ли он вашу проблему -

@Override
 public View getView(int position, View convertView, ViewGroup parent) {
  if (convertView == null) {
     convertView = to the view to be displayed;
  }
  if(!itensAvailable[position]) convertView.setBackgroundColor(Color.Gray);
  return convertView;
 }
...