错误的转换视图'滚动列表视图时的对象

时间:2014-07-22 08:37:18

标签: android position convertview getview

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

我的Listview中有3个项目,在加载'位置'使用索引' 0' 调用参数,convertView为 null

当我逐个滚动时,到下一个项目'位置'是' 1' ,convertView也是 null

问题在于第3项,“#”位置'是' 2' 但是' convertView'是非空,它由第一项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();
        }

}

2 个答案:

答案 0 :(得分:1)

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

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

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

希望它有所帮助。

答案 1 :(得分: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;
}