GridView 示例不起作用

Posted

技术标签:

【中文标题】GridView 示例不起作用【英文标题】:GridView example not working 【发布时间】:2014-02-22 10:35:59 【问题描述】:

我正在通过此链接获得帮助:android GridView Layout Tutorial。当我运行我的应用程序时,我的应用程序停止工作。我收到以下错误。 我想创建在 gridview 中显示缩略图的 gridview 并在点击时显示全尺寸图像。为此,我将每个图像的缩略图和完整图像保存在 drawable 中。这该怎么做?请帮帮我。

ImageAdapter 类-

public class ImageAdapter extends BaseAdapter 
    private Context mContext;

    public Integer[] mThumbIds = 
            R.drawable.kri1, R.drawable.kri2,
            R.drawable.kri3, R.drawable.kri4,
            R.drawable.kri5, R.drawable.kri6,
            R.drawable.kri7, R.drawable.kri8,
            R.drawable.kri9,R.drawable.kri7, R.drawable.kri8,
            R.drawable.kri9, R.drawable.kri7, R.drawable.kri8,
            R.drawable.kri9
    ;

    // Constructor
    public ImageAdapter(Context c)
        mContext = c;
    

    @Override
    public int getCount() 
        return mThumbIds.length;
    

    @Override
    public Object getItem(int position) 
        return mThumbIds[position];
    

    @Override
    public long getItemId(int position) 
        return 0;
    

    @Override
    public View getView(int position, View convertView, ViewGroup parent) 
        ImageView imageView = new ImageView(mContext);
        imageView.setImageResource(mThumbIds[position]);
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setLayoutParams(new GridView.LayoutParams(70, 70));
        return imageView;
    


Logcat-

02-20 07:06:19.930: E/AndroidRuntime(2541): FATAL EXCEPTION: main
02-20 07:06:19.930: E/AndroidRuntime(2541): Process: com.example.gridview, PID: 2541
02-20 07:06:19.930: E/AndroidRuntime(2541): java.lang.OutOfMemoryError
02-20 07:06:19.930: E/AndroidRuntime(2541):     at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
02-20 07:06:19.930: E/AndroidRuntime(2541):     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:575)
02-20 07:06:19.930: E/AndroidRuntime(2541):     at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:410)
02-20 07:06:19.930: E/AndroidRuntime(2541):     at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:840)
02-20 07:06:19.930: E/AndroidRuntime(2541):     at android.content.res.Resources.loadDrawable(Resources.java:2110)
02-20 07:06:19.930: E/AndroidRuntime(2541):     at android.content.res.Resources.getDrawable(Resources.java:700)
02-20 07:06:19.930: E/AndroidRuntime(2541):     at android.widget.ImageView.resolveUri(ImageView.java:638)
02-20 07:06:19.930: E/AndroidRuntime(2541):     at android.widget.ImageView.setImageResource(ImageView.java:367)

【问题讨论】:

您正在使用高分辨率的Bitmaps。而是将缩略图加载到内存中 @GopalRao 如何使用缩略图?我想在点击任何图像时打开完整的图像。 阅读如何处理Bitmaps here 和示例项目here... 【参考方案1】:

您使用的是高分辨率图像,因此堆负载很大。而是尝试在 getView() 上使用您正在使用的采样图像。

BitmapFactory.Options options = new BitmapFactory.Options();
// set options for your need here
BitmapFactory.decodeResource(context, yourImageId, options);

【讨论】:

在哪里使用此代码。我有 9 张图片那么我必须使用哪个 Id 图片? 正如我在答案中所说,您正在获取有关 getView() 方法的引用,并且每次您在 BitmapFactory 方法上方使用图像来降低样本图像时,它不会填满您的堆内存。似乎图像具有高分辨率。在您的情况下,您可以在 mThumbIds[position] 获得参考。 您能否根据我的代码更改答案中的代码。我没有得到你。 如何有效加载大位图:developer.android.com/training/displaying-bitmaps/… 请阅读上面发布的@user3126670链接,它详细解释了您的情况。

以上是关于GridView 示例不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在gridview页面更改后Jquery colorbox不起作用

GridView - 选择第一行不起作用

EmptyDataTemplate 和 EmptyDataText 在 GridView 中不起作用

我的 DateAdd 函数在 GridView 中不起作用?

GridView 中的全选不起作用

C# 分页中 CodeBehind 的 GridView 不起作用