Java 在android的自定义GridView中使用毕加索库
我正在处理一个项目,其中有一个自定义gridview,其中包含一个图像和一个文本视图。我正在尝试使用毕加索库从url加载图像。我面临的问题是: 加载图像后,我滚动网格查看列表底部的图像,它会继续加载。但当我滚动回顶部时,已经加载的图像会再次开始加载。为什么顶部的图像不会保持固定?为什么它们会再次开始加载? 我的代码如下所示: 在其中设置图像的适配器:Java 在android的自定义GridView中使用毕加索库,java,android,gridview,Java,Android,Gridview,我正在处理一个项目,其中有一个自定义gridview,其中包含一个图像和一个文本视图。我正在尝试使用毕加索库从url加载图像。我面临的问题是: 加载图像后,我滚动网格查看列表底部的图像,它会继续加载。但当我滚动回顶部时,已经加载的图像会再次开始加载。为什么顶部的图像不会保持固定?为什么它们会再次开始加载? 我的代码如下所示: 在其中设置图像的适配器: public class CustomGridAdapter extends BaseAdapter { private Context
public class CustomGridAdapter extends BaseAdapter {
private Context mContext;
ArrayList<Sports_data> list;
LayoutInflater mInflater;
public ImageLoader imageLoader;
public CustomGridAdapter(Context c,ArrayList<Sports_data> list ) {
mContext = c;
this.list=list;
mInflater= (LayoutInflater) mContext.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
imageLoader=new ImageLoader(c);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return list.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
GridHolder holder=null;
if(convertView==null)
{
convertView = mInflater.inflate(R.layout.grid_single,parent,false);
holder=new GridHolder();
holder.gridimage=(ImageView) convertView.findViewById(R.id.grid_image);
holder.txtgrid=(TextView) convertView.findViewById(R.id.grid_text);
convertView.setTag(holder);
}
else
{
holder = (GridHolder) convertView.getTag();
}
//holder.gridimage.setImageResource(R.drawable.ic_launcher);
holder.txtgrid.setText(list.get(position).sports_name);
//imageLoader.DisplayImage(list.get(position).sports_image_url, holder.gridimage);
Picasso.with(mContext).load(list.get(position).sports_image_url).noFade().into(holder.gridimage);
return convertView;
}
public class GridHolder
{
ImageView gridimage;
TextView txtgrid;
}
}
请帮忙 在我的应用程序中,我使用AsyncTask将图像加载到GridView中,它看起来与您描述的方式完全相同 我认为这是GridView/ListView回收屏幕上看不到的图像的本质。如果GridView/ListView在上下滚动时没有这样做,分配给应用程序的内存将很快耗尽,导致崩溃 您的问题的解决方案可能是将加载(下载)的图像缓存到内存/磁盘中,然后使用它们,而不是再次重新加载 请看我参加的培训:
不幸的是,我跳过了缓存位图的部分,因此我无法向您提供任何代码。您需要在GridHolder类中创建一个构造函数。在这里,您需要为希望视图持有者缓存的每个视图调用findViewById()。这样做:
class GridHolder {
ImageView gridimage;
TextView txtgrid;
public GridHolder(View itemView) {
gridimage= (ImageView) itemView.findViewById(R.id.grid_image);
txtgrid= (TextView) itemView.findViewById(R.id.grid_text);
}
}
您在清单中有什么权限?我应该有写外部存储权限吗?请尝试为外部存储添加写和读。@Niko如果您添加写权限,您不必添加读权限,因为write include read.hay@AchuthanM我面临同样的问题。如果您找到了解决方案,请发布它
class GridHolder {
ImageView gridimage;
TextView txtgrid;
public GridHolder(View itemView) {
gridimage= (ImageView) itemView.findViewById(R.id.grid_image);
txtgrid= (TextView) itemView.findViewById(R.id.grid_text);
}
}