如何解决内存泄漏在GridView的? [英] How to fix memory leak in GridView?

查看:135
本文介绍了如何解决内存泄漏在GridView的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在GridView的内存使用情况的每次旋转在增加...

After each rotation of GridView memory usage is increasing...

在GridView控件设置适配器:

Setting adapter on GridView:

        gridview = (GridView) findViewById(R.id.grid);
        gridview.setAdapter(new MenuAdapter(getApplicationContext(), width, height, density, gridview));
        gridview.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                Toast.makeText(getApplicationContext(), Integer.toString(position), Toast.LENGTH_SHORT).show();
            }
        });

适配器getView部分:

Adapter getView part:

    public View getView(int position, View convertView, ViewGroup parent) {


    if (convertView == null) {

        gridView = new View(context);
        gridView = inflater.inflate(R.layout.menu_item, null);          

    } else {
        gridView = (View) convertView;
    }


    btn_ = (LinearLayout) gridView.findViewById(R.id.btn);
    textView = (TextView) gridView.findViewById(R.id.menuItem_txt);
    imageView = (ImageButton) gridView.findViewById(R.id.menuItem_img);

    btn_.setBackgroundColor(back_color[position]);      

    textView.setText(menuValues[position]);
    textView.setTextColor(txt_color[position]);
    textView.setTypeface(font);

    imageView.setScaleType(ImageButton.ScaleType.CENTER_CROP);
    imageView.setFocusable(false);
    imageView.setClickable(false);
    imageView.setAdjustViewBounds(true);
    imageView.setColorFilter(img_color[position]);
    imageView.setImageResource(img[position]);


    return gridView;
}

之间的部分去掉后,否则{}和返回语句不存在内存越来越大,所以我想的问题是除去code某处...?

After removing part between "else{}" and "return" statement there are no memory increasing, so i guess problem is somewhere in removed code...?

推荐答案

删除此

 gridView = new View(context); // not required

使用 ViewHolder 模式

http://developer.android.com/training/improving-布局/平滑scrolling.html

static class ViewHolder
{
TextView tv;
ImageView iv;
LinearLayout b;
}

修改 getView

@Override
public View getView(int position, View convertView, ViewGroup parent) {
 ViewHolder holder;

if (convertView == null) {
    convertView = inflater.inflate(R.layout.menu_item, null);     
    holder = new ViewHolder();
    holder.iv = (ImageButton) convertView.findViewById(R.id.menuItem_img);   
    holder.b = (LinearLayout) convertView.findViewById(R.id.btn);
    holder.tv = (TextView) convertView.findViewById(R.id.menuItem_txt);
    convertView.setTag(holder);
} else {
     holder = (ViewHolder) convertView.getTag();
}


holder.b.setBackgroundColor(back_color[position]);      
holder.tv.setText(menuValues[position]);
holder.tv.setTextColor(txt_color[position]);
holder.tv.setTypeface(font);

holder.iv.setScaleType(ImageButton.ScaleType.CENTER_CROP);
holder.iv.setFocusable(false);
holder.iv.setClickable(false);
holder.iv.setAdjustViewBounds(true);
holder.iv.setColorFilter(img_color[position]);
holder.iv.setImageResource(img[position]);


return convertView;
}

这篇关于如何解决内存泄漏在GridView的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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