网格视图crashe上滚动太多的图像应用程序 [英] Grid view crashe the app on scrolling on too many images

查看:215
本文介绍了网格视图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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆