2014-01-29 3 views
0

Я использую настроенное представление списка для контрольного списка. Одно изображение и некоторый текст задается с помощью ArrayAdapter. Когда пользователь нажимает на элемент в списке, я хочу сначала удалить курсор изображения изображения, установленного с фоновым ресурсом в XML, и заменить его на другой.ListView Изображение не обновляется при нажатии элемента

Во-первых изображение не исчезает, а во-вторых, образ я пытаюсь установить его тоже, кажется, появляются в случайном порядке, а иногда и не на всех:

В onListItemClicked Метод

@Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
     // when a list item is clicked, first remove the XML set image cross to a replace with tick on image view 

     super.onListItemClick(l, v, position, id); 

     ImageView equitmentCrossed = (ImageView) this.findViewById(R.id.iv_equitmentCheckList_Cross); 
     equitmentCrossed.setBackgroundResource(0); 
     //displayImage.setBackground(null); 
     equitmentCrossed.setBackgroundResource(R.drawable.tick); 

    }//end onListItemClicked 

Массив Addapter:

ArrayAdapter checklistadaptor = new ArrayAdapter<Pair<String, Integer>>(this, 
      R.layout.checklist_row, R.id.tv_equimentChecklistName, equitmentAndImagesArray) { 

    //over ride getView 
    public View getView(int position, View convertView, ViewGroup container) { 
     if(convertView == null) { 
      convertView = LayoutInflater.from(getContext()).inflate(R.layout.checklist_row, container, false); 
     } 

     TextView title = (TextView) convertView.findViewById(R.id.tv_equimentChecklistName); 
     Pair<String, Integer> item = getItem(position); 
     title.setText(item.first); 
     ImageView displayIcon = (ImageView) convertView.findViewById(R.id.iv_equimentChecklist); 
     displayIcon.setBackgroundResource(item.second); 
     //title.setCompoundDrawablesWithIntrinsicBounds(item.second, 0, 0, 0); 
     return convertView; 
    } 
};//end getView 

this.setListAdapter(checklistadaptor); 
+0

Какова точка вызова 'setBackgroundResource' последовательно? – codeMagic

+0

Первый вызов - удалить текущую выписку, определенную в XML. Во-вторых, заменить на новый drawable – dancingbush

+0

Так почему бы просто не заменить его? – codeMagic

ответ

1

Предполагаете, вы используете ListActivity? Поэтому, когда вы звоните this.findViewById() в onListItemClick(), this ссылается на ListActivity, который содержит несколько просмотров с идентификатором iv_equitmentCheckList_Cross (по одному на каждую запись). Android обычно вернет первое совпадение. Попробуйте изменить его на v.findViewById(R.id.iv_equitmentCheckList_Cross). v должен быть представлением, представляющим строку.

+0

Спасибо, получив изображение с помощью v.findViewById, измените изображение для выбранного элемента, а также изображения, принадлежащие элементам списка, только видимые как u, прокрутите список вниз! Также setBackGround (null) не удаляет предыдущий образ, установленный в XML – dancingbush

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