Android ImageView 内存不足
Android ImageView Outof memory
这是我的代码,它在三星手机上响应内存不足错误!
我在 google 中搜索了很多但没有得到答复。
在列表中显示图像时强制关闭。
public class CustomList extends ArrayAdapter<String>{
private final Activity context;
private final String[] web;
private final String[] imageId;
public CustomList(Activity context,String[] web,String[] img) {
super(context, R.layout.tag_list_item, web);
this.context = context;
this.web = web;
this.imageId = img;
}
@SuppressLint({ "ViewHolder", "InflateParams" })
@Override
public View getView(int position, View view, ViewGroup parent) {
LayoutInflater inflater = context.getLayoutInflater();
View rowView= inflater.inflate(R.layout.tag_list_item, null, true);
TextView txtTitle = (TextView) rowView.findViewById(R.id.txt);
ImageView imageView = (ImageView) rowView.findViewById(R.id.img);
txtTitle.setText(web[position]);
try{
Resources resources = context.getResources();
final int resourceId = resources.getIdentifier("cat_"+imageId[position].trim().toString(), "drawable",
context.getPackageName());
//resources.getDrawable(resourceId);
imageView.setImageDrawable(resources.getDrawable(resourceId));
}catch(Exception e){
Toast.makeText(getApplicationContext(), e.toString()+" "+imageId[position].trim().toString(), Toast.LENGTH_LONG).show();
}
return rowView;
}
}
我在清单中使用了堆大小并结束了。
您应该优化代码以防止每次滚动时都重新创建该行。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.tag_list_item, null);
viewHolder = new ViewHolder();
viewHolder.txtTitle =(TextView)convertView.findViewById(R.id.txt);
viewHolder.imageView = (ImageView)convertView.findViewById(R.id.img);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag(); // this line doesn' t recreate the view but reuse the one created before
}
viewHolder.txtTitle.setText(web[position]);
try{
Resources resources = context.getResources();
final int resourceId = resources.getIdentifier("cat_"+imageId[position].trim().toString(), "drawable",
context.getPackageName());
//resources.getDrawable(resourceId);
viewHolder.imageView.setImageDrawable(resources.getDrawable(resourceId));
}catch(Exception e){
Toast.makeText(getApplicationContext(), e.toString()+" "+imageId[position].trim().toString(), Toast.LENGTH_LONG).show();
}
return convertView;
}
private class ViewHolder {
public TextView txtTitle;
public ImageView imageview;
}
希望对您有所帮助....编码愉快:)
这是我的代码,它在三星手机上响应内存不足错误! 我在 google 中搜索了很多但没有得到答复。 在列表中显示图像时强制关闭。
public class CustomList extends ArrayAdapter<String>{
private final Activity context;
private final String[] web;
private final String[] imageId;
public CustomList(Activity context,String[] web,String[] img) {
super(context, R.layout.tag_list_item, web);
this.context = context;
this.web = web;
this.imageId = img;
}
@SuppressLint({ "ViewHolder", "InflateParams" })
@Override
public View getView(int position, View view, ViewGroup parent) {
LayoutInflater inflater = context.getLayoutInflater();
View rowView= inflater.inflate(R.layout.tag_list_item, null, true);
TextView txtTitle = (TextView) rowView.findViewById(R.id.txt);
ImageView imageView = (ImageView) rowView.findViewById(R.id.img);
txtTitle.setText(web[position]);
try{
Resources resources = context.getResources();
final int resourceId = resources.getIdentifier("cat_"+imageId[position].trim().toString(), "drawable",
context.getPackageName());
//resources.getDrawable(resourceId);
imageView.setImageDrawable(resources.getDrawable(resourceId));
}catch(Exception e){
Toast.makeText(getApplicationContext(), e.toString()+" "+imageId[position].trim().toString(), Toast.LENGTH_LONG).show();
}
return rowView;
}
}
我在清单中使用了堆大小并结束了。
您应该优化代码以防止每次滚动时都重新创建该行。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.tag_list_item, null);
viewHolder = new ViewHolder();
viewHolder.txtTitle =(TextView)convertView.findViewById(R.id.txt);
viewHolder.imageView = (ImageView)convertView.findViewById(R.id.img);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag(); // this line doesn' t recreate the view but reuse the one created before
}
viewHolder.txtTitle.setText(web[position]);
try{
Resources resources = context.getResources();
final int resourceId = resources.getIdentifier("cat_"+imageId[position].trim().toString(), "drawable",
context.getPackageName());
//resources.getDrawable(resourceId);
viewHolder.imageView.setImageDrawable(resources.getDrawable(resourceId));
}catch(Exception e){
Toast.makeText(getApplicationContext(), e.toString()+" "+imageId[position].trim().toString(), Toast.LENGTH_LONG).show();
}
return convertView;
}
private class ViewHolder {
public TextView txtTitle;
public ImageView imageview;
}
希望对您有所帮助....编码愉快:)