滚动上行后,Android列表滚动项在顶部不可见,但我不需要

时间:2015-08-10 20:46:01

标签: android android-listview android-adapter android-viewholder

我正在使用列表视图,其中一行中有两个项目,也是通过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;
}

需要一些帮助。

1 个答案:

答案 0 :(得分:1)

看起来您没有正确考虑视图被重用的事实,如果传递给convertView的{​​{1}}的值不为空,那么这意味着视图正在重用,所以你必须重置它的状态。所以,你有时会打电话给

getView()

当重复使用视图时,视图仍然是不可见的。

所以,为了解决这个问题,你需要通过调用

确保它可见
holder.performerSecondLi.setVisibility(View.INVISIBLE);

中的

holder.performerSecondLi.setVisibility(View.VISIBLE);