我的问题是,当我滚动列表视图时,我得到了错误的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();
}
}
答案 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;
}