【发布时间】:2014-01-27 04:34:34
【问题描述】:
我想在用户单击“关于”imageView 时增加“layout_quota_info”的高度,所以我为 imageview 设置了一个 onclicklistener。
但是,当用户单击第 1 行中的 about 按钮时,它也会影响其他行。仅当我需要向下滚动时列表长度较长时才会发生这种情况。
我猜这个问题与 ViewHolder 的回收有关,但我不知道如何修复它...... 请帮忙....
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
Section section = list.get(position);
if (convertView == null) {
LayoutInflater mInflater = (LayoutInflater) context
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = mInflater
.inflate(R.layout.list_section_item, null, false);
holder = new ViewHolder();
holder.name = (TextView) convertView.findViewById(R.id.list_section_name);
holder.room = (TextView) convertView.findViewById(R.id.list_section_room);
holder.instructor = (TextView) convertView.findViewById(R.id.list_section_instructor);
holder.datetime = (TextView) convertView.findViewById(R.id.list_section_datetime);
holder.about = (ImageView) convertView.findViewById(R.id.list_section_about);
holder.quota = (TextView) convertView.findViewById(R.id.list_section_quota);
holder.avail = (TextView) convertView.findViewById(R.id.list_section_avail);
holder.enrol = (TextView) convertView.findViewById(R.id.list_section_enrol);
holder.wait = (TextView) convertView.findViewById(R.id.list_section_wait);
holder.quota_info = (LinearLayout) convertView.findViewById(R.id.layout_quota_info);
holder.layout_card = (LinearLayout) convertView.findViewById(R.id.layout_card);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
holder.name.setText(section.name);
holder.room.setText(section.room);
holder.quota.setText("Quota\n" + section.quota);
holder.avail.setText("Avail\n" + section.avail);
holder.enrol.setText("Enrol\n" + section.enrol);
holder.wait.setText("Wait\n" + section.wait);
holder.instructor.setText(section.instructor);
holder.datetime.setText(section.datetime);
holder.quota_info.getLayoutParams().height = 1;
holder.quota_info.requestLayout();
holder.about.setOnClickListener(new OnSectionMoreClickListener(holder, section){
@Override
public void onClick(View v) {
ViewHolder holder = (ViewHolder) getViewHolder();
Section section = getSection();
LinearLayout ll = holder.quota_info;
ResizeAnimation anim = new ResizeAnimation(ll, ll.getWidth(), ll.getHeight(), ll.getWidth(), ll.getHeight() + 165f);
anim.setDuration(300);
//anim.setFillAfter(true);
ll.startAnimation(anim);
ll.setVisibility(View.VISIBLE);
}
});
return convertView;
}
class ViewHolder {
TextView name;
TextView room;
TextView instructor;
TextView datetime;
TextView avail;
TextView enrol;
TextView wait;
TextView quota;
ImageView about;
LinearLayout layout_card;
LinearLayout quota_info;
}
【问题讨论】: