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.....

但是没有什么像findViewByIdforViewParent

4

1 回答 1

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
    }
}
于 2013-09-20T09:13:41.293 回答