gpt4 book ai didi

android - 当我滚动 ListView 时,项目在 ListView 中的位置正在改变

转载 作者:行者123 更新时间:2023-11-30 02:36:51 25 4
gpt4 key购买 nike

我的应用程序有一个 ListView , ListView 的行由 imageView 和 Textview 组成。该应用程序从网络下载图像以在行布局中设置 ImageView 。当我在 ListView 中上下滚动时,我遇到了图像重新下载的问题。为此,我使用了 ViewHolder 模式来保存列表项。问题已经解决,但这次我遇到了新问题。

Listview 中有 15 行。因此,列表底部的项目不会出现。当我向下滚动列表以查看项目时,列表顶部的项目即将结束 lisview。此外,当我向上滚动列表时,列表末尾的项目会出现在列表顶部。

因此它不显示需要显示的值或行。

我的 getView() 方法的最后状态是..

@Override
public View getView(int position, View convertView, ViewGroup parent) {


ViewHolder viewHolder;

if (convertView == null) {

convertView = mInflater.inflate(R.layout.row_layout, null);

TextView programName = (TextView)convertView.findViewById(R.id.programName);
TextView programTime = (TextView)convertView.findViewById(R.id.programTime);
TextView programState = (TextView)convertView.findViewById(R.id.programState);
ImageView programImage = (ImageView)convertView.findViewById(R.id.programImage);


programName.setText(values.programNames.get(position));
programTime.setText(values.programTimes.get(position));
new imageDownload(programImage).execute(values.programImageUrls.get(position));

viewHolder = new ViewHolder();
viewHolder.p_Name = programName;
viewHolder.p_Time = programTime;
viewHolder.p_State = programState;
viewHolder.p_Image = programImage;

convertView.setTag(viewHolder);

}else{

viewHolder = (ViewHolder) convertView.getTag();
}

return convertView;
}

我的看法持有人...

public static class ViewHolder {
TextView p_Name;
TextView p_Time;
TextView p_State;
ImageView p_Image;
}

非常感谢

最佳答案

将其移出设置转换 View 的位置

programName.setText(values.programNames.get(position));
programTime.setText(values.programTimes.get(position));
new imageDownload(programImage).execute(values.programImageUrls.get(position));

所以看起来像这样

@Override
public View getView(int position, View convertView, ViewGroup parent) {


ViewHolder viewHolder;

if (convertView == null) {

convertView = mInflater.inflate(R.layout.row_layout, null);

TextView programName = (TextView)convertView.findViewById(R.id.programName);
TextView programTime = (TextView)convertView.findViewById(R.id.programTime);
TextView programState = (TextView)convertView.findViewById(R.id.programState);
ImageView programImage =(ImageView)convertView.findViewById(R.id.programImage);



viewHolder = new ViewHolder();
viewHolder.p_Name = programName;
viewHolder.p_Time = programTime;
viewHolder.p_State = programState;
viewHolder.p_Image = programImage;

convertView.setTag(viewHolder);

}else{

viewHolder = (ViewHolder) convertView.getTag();
}

viewHolder.p_Name.setText(values.programNames.get(position));
viewHolder.p_Time.setText(values.programTimes.get(position));
new imageDownload(programImage).execute(values.programImageUrls.get(position));


return convertView;
}

此外,我强烈建议您使用 Picasso 下载图片,因为它会自动为您处理缓存。我还会考虑用 Butterknife 注入(inject)你的 ViewHolder,这也会减少你在这里的代码

关于android - 当我滚动 ListView 时,项目在 ListView 中的位置正在改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26408358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com