1.问题描述:
在使用ListView的时候,需求是点击item中的按钮,展开该item隐藏掉的布局。
但是点击之后,当数据一屏展示不下的时候,不仅点击的item的布局展开了,还有其它隐藏的布局也展开了。
2.问题分析:
参考:
http://www.cnblogs.com/3dant/archive/2011/04/06/2007060.html
当显示完一屏数据后,向上拉的时候第二屏数据中的控件实际是复用的上面的控件,若复用了显示出来的控件,则会出现布局重复。
3.问题解决:
在每次点击的时候,可以记录下当前点击的position,保存到List中。为控件赋值的时候,判断一下当前位置是否在List当中,若有,则显示,若没有,则隐藏掉。
4.核心代码:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder viewHolder;
Log.d("MyAdapter","getView==="+position+"");
if(convertView == null){
convertView = View.inflate(mContext,R.layout.item_view,null);
viewHolder = new ViewHolder();
viewHolder.tv_title = (TextView) convertView.findViewById(R.id.tv_title);
viewHolder.btn_click = (Button) convertView.findViewById(R.id.btn_click);
viewHolder.tv_content = (TextView) convertView.findViewById(R.id.tv_content);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) convertView.getTag();
}
final Data data = mData.get(position);
viewHolder.tv_title.setText(data.getTitle());
if(positionList.contains(position)){
viewHolder.tv_content.setVisibility(View.VISIBLE);
viewHolder.tv_content.setText(data.getContent());
}else{
viewHolder.tv_content.setVisibility(View.GONE);
}
viewHolder.btn_click.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
viewHolder.tv_content.setVisibility(View.VISIBLE);
viewHolder.tv_content.setText(data.getContent());
positionList.add(position);
Log.d("MyAdapter","OnClick()" + position);
}
});
return convertView;
}