大家好我在两个页面之间导航时遇到了outofmemory错误,这两个页面有2个图库控件(图库),每个页面都有一些额外的细节来填写个人资料信息。在第一页,我们可以查看个人资料详细信息,然后我们移动到另一个页面来编辑详细信息,然后我们可以点击取消按钮返回到第一页。因此,当连续单击编辑和取消按钮时,将打开和关闭配置文件编辑页面。在重复相同的过程一段时间之后,应用程序开始在内存中运行,并且在一个阶段由于内部内存不足,应用程序无法加载页面。我正在检查解决此问题的可能解决方案。任何建议或意见将不胜感激。希望有更好的回应。在此先感谢。
以下是我的代码:
edit_button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//startActivity(new Intent(ProfileView.this, ProfileEdit.class));
startActivity(new Intent(ProfileView.this, ProfileEditLatest.class));
}
});
以下是图库适配器的getView方法:
public View getView(int position, View convertView, ViewGroup parent) {
/*if (position>data.length || position<0) {
return null;
}*/
View vi=convertView;
ImageView image;
if(convertView==null){
vi = inflater.inflate(R.layout.gridview_single, null);
//TextView text=(TextView)vi.findViewById(R.id.text);;
image=(ImageView)vi.findViewById(R.id.image);
final float scale = activity.getResources().getDisplayMetrics().density;
//int pixels = (int) (100 * scale + 0.5f);
int pixels = (int) (100 * scale + 0.5f);
//i.setLayoutParams(new Gallery.LayoutParams(100, 100));
//image.setLayoutParams(new Gallery.LayoutParams(pixels, pixels));
image.setLayoutParams(new RelativeLayout.LayoutParams(pixels,pixels));
//image.setLayoutParams(new LayoutParams(100,100));
//text.setText("item "+position);
}
else{
image=(ImageView)convertView;
}
try{
vi.setTag(data[position]);
imageLoader.DisplayImage(data[position], activity, image);
}
catch (ArrayIndexOutOfBoundsException e) {
// TODO: handle exception
}
return vi;
}
在上面我已经使用了URL
提供的延迟加载在我的个人资料编辑页面中,我有一个声明为静态的位图对象,用于将一些新图像上传到图库中。
希望上述细节有助于找到问题的解决方案。
答案 0 :(得分:1)
你的getView()方法有问题。这不是你应该如何使用它。相反,你必须使用staic View Holder类...
@Override
public View getView(int position, View v, ViewGroup parent) {
// Keeps reference to avoid future findViewById()
ViewHolder viewHolder;
if (v == null) {
LayoutInflater li = (LayoutInflater) getContext().getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
v = li.inflate(R.layout.gridview_single, null);
viewHolder = new ViewHolder();
viewHolder.mIV = (ImageView) v.findViewById(R.id.image);
v.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) v.getTag();
}
// call ur image loader here
imageLoader.DisplayImage(data[position], activity, image);
return v;
}
static class ViewHolder {
ImageView mIV;
}