2011-06-15 2 views
0

У меня есть ListView в моем ListActivity, который надувается адаптером. Существует Handler, и я вызываю его метод postDelayed() для запуска refresh() рекурсивно ListView (с помощью notifyDataSetChanged()). postDealyed() установлено на 1 секунду.справка «listitem» в списке просмотров

Теперь, есть ContextMenus для всех элементов/строк этого ListView.

Я хочу установить/фон элемента подряд в отдельно от ContextMenu с помощью этого кода (с получением позиции «longpressed» строк/п):

public boolean onContextItemSelected(MenuItem item) { 
     AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
    ... 
    case R.id.highlight: 
     ListView lv = (ListView)getListView(); 
     View row = (View) lv.getChildAt(info.position); 
     row.setBackgroundColor(Color.argb(255, 22, 100, 100)); 
     return true; 
    ... 

Когда я запустить приложение выбранной Роу фон изменяется (как и должно быть), однако каждую секунду (поэтому при каждом обновлении ListView) другая строка изменяется, а выбранная строка возвращается в исходное состояние. Через секунду все меняется. Если я скольжу по строкам ListView, другие строки также становятся мигающими. Так же, как если бы ссылки менялись или я действительно не знаю. Если я перестану скользить, мигающие фоны имеют узор до следующего слайда, когда он получит другой рисунок.

Любые идеи? Спасибо заранее!

ответ

1

Это потому, что ваши представления перерабатываются. Ваш код «подсветки» должен обновить модель резервной копии элемента списка и присвоить ее «выделенному» свойству значение true, это не должно меняться напрямую. Когда вы визуализируете свой элемент (в своем адаптере), вы проверяете, является ли это свойство истинным, если оно есть, затем используйте заданный вами фон, в противном случае установите его на значение по умолчанию.

+0

Хм, я думал, что это решит проблему, но я отредактировал код, как вы предлагали, и проблема все еще остается. Теперь адаптер проверяет, нуждается ли в строке другой фон или нет. Если ему нужен адаптер, он перезаписывает фон с помощью setBackgroundColor. Если я сдвигаю ListView, то останется такая же кричащая вещь. – IBoS

+0

Однако, если я переписываю фон не только для строки, которая должна быть подсвечена, но и для всех строк в адаптере (с черным цветом для других, например), она будет работать, но тогда я потеряю исходное визуальное поведение строк в режиме onlongpress. Я знаю, что могу изменить их так же, как и было, но было бы лучше, если бы мне не нужно было устанавливать фон из других строк. – IBoS

+0

в любом случае, я переместил код в адаптер и установил не только один из конвертеров, но все они с другим фоном/селекторами ect. в зависимости от того, нужно ли его выделить или нет. – IBoS

Смежные вопросы