1

我的问题是,当我滚动列表视图时,convertView 出错了,但位置是正确的。

我的 Listview 中有 3 个项目,加载时使用索引'0'调用 'position' 参数,并且 convertView 为null

当我一个一个滚动时,下一个项目'位置'是'1'并且convertView也为

问题出在第 3 项上,“位置”是“2”,但“convertView”不是 null,它由第一项 convertView填充。

这是为什么 ?

 public View getView(final int position, View convertView, ViewGroup parent) {
        View itemView = convertView;
        if (itemView == null) {
            itemView = getLayoutInflater().inflate(R.layout.post_layout, parent, false);

            postViewHolder                              = new PostViewHolder();
            postViewHolder.commentsImageButton          = (ImageButton) itemView.findViewById(R.id.postAddCommentsImageButton);

            itemView.setTag(postViewHolder);
        }else{
            postViewHolder = (PostViewHolder) itemView.getTag();
        }

}

4

2 回答 2

1

您只会在 listView 中获得 N 个 null 项,此值 N 将根据屏幕中输入的行数而变化。

例如,如果您的屏幕中有 3 行,您可能会有 4 或 5 行项目。这是因为 Android 将旧视图回收到新视图中。

如果您需要跟踪持有人的位置,请将您postViewHolder.position的 if / else 语句移出。

希望能帮助到你。

于 2014-07-22T08:44:08.520 回答
0

尝试这个

public View getView(final int position, View convertView, ViewGroup parent) {
        View itemView = convertView;
        PostViewHolder postViewHolder = null;
        if (itemView == null) {
            itemView = getLayoutInflater().inflate(R.layout.post_layout, parent, false);
            postViewHolder                              = new PostViewHolder();
            postViewHolder.commentsImageButton          = (ImageButton) itemView.findViewById(R.id.postAddCommentsImageButton);

            itemView.setTag(postViewHolder);
        }else{
            postViewHolder = (PostViewHolder) itemView.getTag();
        }
        postViewHolder.position    = position;
        :do your stuff with postViewHolder
        :
        return itemView;
}
于 2014-07-22T08:54:44.120 回答