2013-09-20 3 views
0
holder.voteUp.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     final int position = myList.getPositionForView((View) v 
       .getParent()); 
     final ListItem li = values.get(position); 
     li.voteUp_value = true; 
     //In getView(), I set different image to holder.voteUp ImageView depending on this value. 
     //Hence I call notifyDataSetChanged(); which takes care of it. 
     notifyDataSetChanged(); 
    } 
}); 

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

Я не могу изменить изображение holder.voteUp напрямую, потому что есть holder.voteDown, который также должен быть изменен, в зависимости от li.voteUp_value. Итак, я пошел с notifyDataSetChanged();, который заботится обо всем этом.

Есть ли способ получить представление от родителя Просмотр и установка изображений вместо notifyDataSetChanged();?

как:

ViewParent vp = v.getParent(); 
ImageView im = vp.findViewById(R.id.voteUp); 
im.setImageResource..... 

Но нет ничего подобного findViewById для ViewParent

ответ

0

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

@Override 
public void onClick(View v) { 
    final int position = myList.getPositionForView((View) v 
      .getParent()); 
    final ListItem li = values.get(position); 
    li.voteUp_value = true; 

    ImageView im = vp.findViewById(R.id.voteUp); 
    if (im != null) { 
     //Update the view here 
    } 
} 
Смежные вопросы