当我滚动列表视图时,列表视图中项目的位置正在改变
我的应用程序有一个listview和listview的行由imageView和Textview组成。 该应用程序从网上下载图像以在行布局中设置imageview。 当我在列表视图中上下滚动时,我遇到了有关图像重新下载的问题。 出于这个原因,我使用ViewHolder模式来保存列表项。 问题已经解决,但这次我有一个新问题。
列表视图中有15行。 因此,列表底部的项目不会显示。 当我在列表中查看项目时,列表顶部的项目即将结束。 另外,当我匆匆列出清单时,列表末尾的项目即将到来。
所以它不显示需要显示的值或行。
我的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;
}
我的观点Holder ...
public static class ViewHolder {
TextView p_Name;
TextView p_Time;
TextView p_State;
ImageView p_Image;
}
万分感谢
将此移到您设置convertview的位置之外
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注入你的ViewHolder,这也会减少你的代码
谢谢您的回答。 我决定使用毕加索的图像。 我只是改变了下面的代码
@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_Ad.setText(values.programIsimleri.get(position));
viewHolder.p_Saat.setText(values.programSaatleri.get(position));
Picasso.with(getApplicationContext()).load(values.programImageUrls.get(position)).into(viewHolder.p_Image);
return convertView;
}
代码现在正常工作。
您应该在ViewHolder类上拥有一个位置值,以便您可以比较convertView.getTag()中检索的ViewHolder的位置。 如果convertView不为null,则需要确保在视图中具有正确的信息。
if (viewHolder.position != position) {
//retrieves the correct position of the information
viewHolder.p_Name.setText(values.programNames.get(position));
//etc
viewHolder.position = position;
}
链接地址: http://www.djcxy.com/p/67341.html
上一篇: Position of items in listview is changing when I scroll the listview
下一篇: ListView memory leak: not able to recycle list elements (ImageView + Bitmap)