我正在使用列表视图,其中一行中有两个项目,也是通过addHeaderView()
添加的标题项目。
最初我使用包含7个项目的虚拟数据,因此listview的最后一项必须是不可见的。
我的数据首次成功添加。但在向上滚动后,我的第一行第二项将变为隐形,但我不希望这样。
这是我的适配器代码:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
LayoutInflater mInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.home_grid_item, parent,
false);
holder = new ViewHolder();
holder.imgPerformer = (CircularImageView) convertView
.findViewById(R.id.imgPerformer);
holder.listItemTextView = (TextView) convertView
.findViewById(R.id.listItemTextView);
holder.imgPerformer1 = (CircularImageView) convertView
.findViewById(R.id.imgPerformer1);
holder.listItemTextView1 = (TextView) convertView
.findViewById(R.id.listItemTextView1);
holder.performerFirstLi = (LinearLayout) convertView
.findViewById(R.id.performerFirstLi);
holder.performerSecondLi = (LinearLayout) convertView
.findViewById(R.id.performerSecondLi);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
index = position * 2;
holder.imgPerformer.setImageResource(performerItems.get(index)
.getIcon());
holder.listItemTextView.setText(performerItems.get(index).getName());
if (performerItems.size() > index + 1) {
holder.imgPerformer1.setImageResource(performerItems.get(index + 1)
.getIcon());
holder.listItemTextView1.setText(performerItems.get(index + 1)
.getName());
} else {
holder.performerSecondLi.setVisibility(View.INVISIBLE);
}
holder.imgPerformer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
holder.imgPerformer1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
return convertView;
}
private static class ViewHolder {
public CircularImageView imgPerformer;
public TextView listItemTextView;
public CircularImageView imgPerformer1;
public TextView listItemTextView1;
public LinearLayout performerFirstLi;
public LinearLayout performerSecondLi;
}
需要一些帮助。
答案 0 :(得分:1)
看起来您没有正确考虑视图被重用的事实,如果传递给convertView
的{{1}}的值不为空,那么这意味着视图正在重用,所以你必须重置它的状态。所以,你有时会打电话给
getView()
当重复使用视图时,视图仍然是不可见的。
所以,为了解决这个问题,你需要通过调用
确保它可见holder.performerSecondLi.setVisibility(View.INVISIBLE);
中的
holder.performerSecondLi.setVisibility(View.VISIBLE);