Android GridView在某些设备上崩溃或速度非常慢(三星Galaxy S4、S3)

Android GridView在某些设备上崩溃或速度非常慢(三星Galaxy S4、S3),android,gridview,crash,mobile-devices,Android,Gridview,Crash,Mobile Devices,我的应用程序中有一个GridView,它在几乎所有设备上都非常棒,但是。。。我给一些朋友做了测试,他们说我的应用程序在GridView上崩溃了。。应用程序崩溃,或者他们必须非常小心地滚动。一些朋友说GridView还可以(还有我的-HTC Wildfire,三星Galaxy Mini),但是我的朋友们说三星Galaxy S3,S4崩溃了。我的网格视图: public static List<Item> items = new ArrayList<Item>(); 从的文

我的应用程序中有一个GridView,它在几乎所有设备上都非常棒,但是。。。我给一些朋友做了测试,他们说我的应用程序在GridView上崩溃了。。应用程序崩溃,或者他们必须非常小心地滚动。一些朋友说GridView还可以(还有我的-HTC Wildfire,三星Galaxy Mini),但是我的朋友们说三星Galaxy S3,S4崩溃了。我的网格视图:

public static List<Item> items = new ArrayList<Item>();
从的文档中。(这是我的)

这会在UI线程上读取和解码位图,这可能会导致延迟中断。如果这是一个问题,考虑使用SETimaDeDRAWEPLAN(Android .Cabase.Dababl,Dababl)或SeMaTimeBITMAP(Android,图形,位图)和BitmapFactory。 我强烈建议您使用该库来显示图像。将库添加到项目后,在
getView()
中调用以下函数:

就这样


公共类ImageAdapter扩展了BaseAdapter{
私有列表项=新的ArrayList();
私人充气机;
私人语境;
公共ImageAdapter(上下文、列表项){
充气器=充气器。从(上下文);
这个项目=项目;
this.context=上下文;
}
.
.
.
@凌驾
公共视图getView(int i、视图视图、视图组视图组){
视图v=视图;
图像视图图片;
文本视图名称;
如果(v==null){
v=充气机。充气(R.layout.squareimageview,viewGroup,false);
v、 setTag(R.id.picture,v.findViewById(R.id.picture));
v、 setTag(R.id.text,v.findviewbyd(R.id.text));
}
picture=(ImageView)v.getTag(R.id.picture);
name=(TextView)v.getTag(R.id.text);
Item=(Item)items.get(i);
毕加索.with(context).load(item.getDrawable()).into(图片);
name.setText(item.name);
返回v;
}
}

尝试使用nostra的图像加载器,正如我在帖子中提到的那样。我如何更改上下文,因为现在我发现了这个错误?您正在
ImageAdapter
的构造函数中接收上下文,将其存储为类变量,就像您处理充气器和物品一样。对不起,我不明白…:(你说存储为类变量是什么意思?这样写:ImageAdapter context;?:/你说将这行picture.setImageResource(item.getDrawable());更改为Picasso.with(context)。加载(item.getDrawable())。到(picture)中;不是吗?如果是的话,当我试图打开GridView时,我的应用程序崩溃了。让我们来看看
GridView gridView = (GridView) findViewById(R.id.gridview);
        items.clear();
//add all items to list

    gridView.setAdapter(new ImageAdapter(this, items));
            gridView.setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View v,
                        int position, long id) {
                    Intent i = new Intent(getApplicationContext(), SecondActivity.class);
                    i.putExtra("id", position);
                    startActivity(i);

                }
            });
public class ImageAdapter extends BaseAdapter {

    private List<Item> items = new ArrayList<Item>();
    private LayoutInflater inflater;

    public ImageAdapter(Context context, List<Item> items) {
        inflater = LayoutInflater.from(context);
        this.items = items;
    }

    @Override
    public int getCount() {
        return items.size();
    }

    @Override
    public Object getItem(int i) {
        return items.get(i);
    }

    @Override
    public long getItemId(int i) {
        return items.get(i).drawable;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        View v = view;
        ImageView picture;
        TextView name;

        if (v == null) {
            v = inflater.inflate(R.layout.squareimageview, viewGroup, false);
            v.setTag(R.id.picture, v.findViewById(R.id.picture));
            v.setTag(R.id.text, v.findViewById(R.id.text));
        }

        picture = (ImageView) v.getTag(R.id.picture);
        name = (TextView) v.getTag(R.id.text);

        Item item = (Item) items.get(i);

        picture.setImageResource(item.getDrawable());
        name.setText(item.name);

        return v;

    }

}
public class SquareImageView extends ImageView {
    public SquareImageView(Context context) {
        super(context);
    }

    public SquareImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public SquareImageView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        setMeasuredDimension(getMeasuredWidth(), getMeasuredWidth()); //Snap to width
    }

}
Picasso.with(context).load(item.getDrawable()).into(picture);
public class ImageAdapter extends BaseAdapter {

    private List<Item> items = new ArrayList<Item>();
    private LayoutInflater inflater;

    private Context context; 

    public ImageAdapter(Context context, List<Item> items) {
        inflater = LayoutInflater.from(context);
        this.items = items;
        this.context = context;
    }
    .
    .
    .
    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        View v = view;
        ImageView picture;
        TextView name;

        if (v == null) {
            v = inflater.inflate(R.layout.squareimageview, viewGroup, false);
            v.setTag(R.id.picture, v.findViewById(R.id.picture));
            v.setTag(R.id.text, v.findViewById(R.id.text));
        }

        picture = (ImageView) v.getTag(R.id.picture);
        name = (TextView) v.getTag(R.id.text);

        Item item = (Item) items.get(i);

        Picasso.with(context).load(item.getDrawable()).into(picture);
        name.setText(item.name);

        return v; 
    }
}