网格视图crashe上滚动太多的图像应用程序 [英] Grid view crashe the app on scrolling on too many images
本文介绍了网格视图crashe上滚动太多的图像应用程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在我的项目中使用自定义适配器,网格视图,当我的网格视图负载很多,其中包含了再次滚动我的活动崩溃和重新加载图像的项目。这对加载图像资源的一些问题,我解决了@Raghunandan帮助
我的错误是出memmory的。因为我觉得loadfull尺寸的图像。
公共类MyAdapter扩展ArrayAdapter< StructureCase> { 私人LayoutInflater mInflater = NULL;
公共上下文的背景下;
公共类distinationActivity = NULL; 公共MyAdapter(上下文的背景下,INT textViewResourceId,列表与LT; StructureCase>对象){
超(背景下,textViewResourceId,对象);
mInflater = LayoutInflater.from(上下文);
// mInflater =(LayoutInflater)G.currentActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } 公共静态类ViewHolder {
公共ImageView的gem_img = NULL;
公众的TextView gem_name = NULL;
} @覆盖
公共查看getView(INT位置,查看convertView,父母的ViewGroup){
最后ViewHolder viewHolder;
最终视图V; 最后StructureCase项目=的getItem(位置); 如果(convertView == NULL){ convertView = this.mInflater.inflate(R.layout.my_grid_list,NULL);
// mInflater =(LayoutInflater)G.currentActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.my_grid_list,父母,假);
viewHolder =新ViewHolder();
convertView.setTag(viewHolder); viewHolder.gem_img =(ImageView的)convertView.findViewById(R.id.imageView_mygrid_list);
viewHolder.gem_name =(TextView中)convertView.findViewById(R.id.textView_mygrid_list); viewHolder.gem_name.setTypeface(G.typeFacePrs); }其他{
viewHolder =(ViewHolder)convertView.getTag();
} INT温度= 0; viewHolder.gem_name.setText(item.g_name);
INT ID = G.currentActivity.getResources()则getIdentifier(item.g_image,可拉伸,G.currentActivity.getPackageName())。
可绘制可绘制= G.currentActivity.getResources()getDrawable(ID)。
如果(绘!= NULL){
viewHolder.gem_img.setImageDrawable(绘制);
}其他{
viewHolder.gem_img.setImageResource(R.drawable.almas); } //viewHolder.newsThumb.setImageResource(temp); viewHolder.gem_img.setOnClickListener(新OnClickListener(){
@覆盖
公共无效的onClick(视图v){
}
}); 返回convertView;
} @覆盖
众长getItemId(INT位置){
返回的位置;
}
解决方案
在 getview方法使用该code到
,同时设置位图的ImageView
。
私人位图德codeURI(URI selectedImage)抛出FileNotFoundException异常
{
BitmapFactory.Options O =新BitmapFactory.Options();
o.inJustDe codeBounds = TRUE;
BitmapFactory.de codeStream(
。getContentResolver()openInputStream(selectedImage),空,O); 最终诠释REQUIRED_SIZE = 800; INT width_tmp = o.outWidth,height_tmp = o.outHeight;
int标= 1;
而(真){
如果(width_tmp / 2'; REQUIRED_SIZE || height_tmp / 2版; REQUIRED_SIZE)
{
打破;
}
width_tmp / = 2;
height_tmp / = 2;
规模* = 2;
} BitmapFactory.Options O2 =新BitmapFactory.Options();
o2.inSampleSize =规模;`输入code here`
返回BitmapFactory.de codeStream(
getContentResolver()openInputStream(selectedImage),空,O2)。
}
in my project that uses custom adapter with grid view , when my grid view load many Items that contain images on scrolling my activity crashes and reloads again. it had some resource problem on loading image that i solved with help of @Raghunandan my error is out of memmory. cause i think loadfull size images.
public class MyAdapter extends ArrayAdapter<StructureCase> {
private LayoutInflater mInflater = null;
public Context context;
public Class distinationActivity = null;
public MyAdapter(Context context, int textViewResourceId, List<StructureCase> objects) {
super(context, textViewResourceId, objects);
mInflater = LayoutInflater.from(context);
// mInflater = (LayoutInflater)G.currentActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public static class ViewHolder {
public ImageView gem_img = null;
public TextView gem_name = null;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder viewHolder;
final View v;
final StructureCase item = getItem(position);
if (convertView == null) {
convertView = this.mInflater.inflate(R.layout.my_grid_list, null);
//mInflater = (LayoutInflater)G.currentActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.my_grid_list, parent, false);
viewHolder = new ViewHolder();
convertView.setTag(viewHolder);
viewHolder.gem_img = (ImageView) convertView.findViewById(R.id.imageView_mygrid_list);
viewHolder.gem_name = (TextView) convertView.findViewById(R.id.textView_mygrid_list);
viewHolder.gem_name.setTypeface(G.typeFacePrs);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
int temp = 0;
viewHolder.gem_name.setText(item.g_name);
int id = G.currentActivity.getResources().getIdentifier(item.g_image, "drawable", G.currentActivity.getPackageName());
Drawable drawable = G.currentActivity.getResources().getDrawable(id);
if(drawable != null){
viewHolder.gem_img.setImageDrawable(drawable);
}else{
viewHolder.gem_img.setImageResource(R.drawable.almas);
}
//viewHolder.newsThumb.setImageResource(temp);
viewHolder.gem_img.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
}
});
return convertView;
}
@Override
public long getItemId(int position) {
return position;
}
解决方案
Use this code to in your getview method
while setting bitmap in ImageView
.
private Bitmap decodeUri(Uri selectedImage) throws FileNotFoundException
{
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(
getContentResolver().openInputStream(selectedImage), null, o);
final int REQUIRED_SIZE = 800;
int width_tmp = o.outWidth, height_tmp = o.outHeight;
int scale = 1;
while (true) {
if (width_tmp / 2 < REQUIRED_SIZE || height_tmp / 2 < REQUIRED_SIZE)
{
break;
}
width_tmp /= 2;
height_tmp /= 2;
scale *= 2;
}
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;`enter code here`
return BitmapFactory.decodeStream(
getContentResolver().openInputStream(selectedImage), null, o2);
}
这篇关于网格视图crashe上滚动太多的图像应用程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文