При выделении элемента (изменении цвета фона) в ListView это повторяется для других элементов - PullRequest
2 голосов
/ 30 мая 2010

Если я хочу отметить второй элемент, я делаю следующий код: Этот код взят из моего адаптера, который расширяет ArrayAdapter:

if (convertView == null) {
        LayoutInflater mInflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = mInflater.inflate(R.layout.channel_list, null);
    } 

    MyContent o = items.get(position);
    if (o != null) {
        TextView tt = (TextView) convertView.findViewById(R.id.toptext);
        TextView bt = (TextView) convertView.findViewById(R.id.bottomtext);
        if (tt != null) {
            tt.setText(o.Top());                            
        }
        if(bt != null){
            bt.setText(o.Bottom());
        }
        if(position == 2) {
            convertView.setBackgroundColor(R.color.selectem_color);
        }
    }
    return convertView;

Отображается представление списка, но отмечается каждый 9-й элемент после этого элемента (11-й элемент, 13-й и т. Д.).

Кто-нибудь знает, в чем причина?

Ответы [ 2 ]

3 голосов
/ 30 мая 2010

Вы не сбрасываете цвет фона. Помните, что строки перерабатываются - это то, для чего convertView. Просто добавьте else {}, чтобы установить цвет в любом нормальном состоянии, когда position не 2, и все будет в порядке.

2 голосов
/ 31 мая 2010

В двух случаях можно вызвать метод getView. Если converView имеет значение null, вы должны создать новый вид. Если это не ноль, элемент, покинувший экран из-за пользовательской прокрутки, перерабатывается и возвращается в ваш метод для повторного использования.

Этот объект является объектом, который был показан в списке ранее. Вы должны проверить его состояние и установить для каждого его свойства значение, которое вы хотите, чтобы оно имело. Вы не можете действовать, как будто объект новый, вы помечены, а объекты не помечены обратно. Сделайте что-нибудь подобное в вашем методе getview.

if(item is selected) {    
    convertView.setBackgroundColor(selected color);
} else {
    convertView.setBackgroundColor(not selected color);
}

В вашем коде отсутствует регистр if.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...