Android 如何在没有outofMemory错误的情况下在多个GridView中加载图像和文本

Android 如何在没有outofMemory错误的情况下在多个GridView中加载图像和文本,android,gridview,Android,Gridview,我有一个布局,它有12个网格视图。我有将近150张图片,我必须将它们加载到GridView中。对于每个GridView,几乎有12张图片。当我想在2个GridView中加载图像和文本时,没有任何问题。但当我想加载3个或更多的图像时,会出现outofmemory错误。这是我在gridview1中加载图像和文本的代码 所有GridView都有这样的代码,唯一的区别是图像和文本。我在onCreate方法中使用了这些代码。当我取消GridView3和更高版本outofmemory的注释代码时,会发生错误

我有一个布局,它有12个网格视图。我有将近150张图片,我必须将它们加载到GridView中。对于每个GridView,几乎有12张图片。当我想在2个GridView中加载图像和文本时,没有任何问题。但当我想加载3个或更多的图像时,会出现outofmemory错误。这是我在gridview1中加载图像和文本的代码

所有GridView都有这样的代码,唯一的区别是图像和文本。我在onCreate方法中使用了这些代码。当我取消GridView3和更高版本outofmemory的注释代码时,会发生错误并退出应用程序。我搜索了一下,有人说使用lazyloading或asynctask,但我不知道如何解决这个问题。我需要你的帮助。
谢谢。

两点:首先,如果您的图像是全屏分辨率的,并且您打算一次在屏幕上显示150个图像,并且不需要以全屏分辨率显示它们,请调整它们的大小。它们消耗的内存远远超过您的需要。若你们打算一次在屏幕上显示所有的图片,那个么它们只是缩略图

第二,若你们不打算一次在屏幕上显示所有的150个,你们不应该试图同时把所有的东西都加载到内存中。你如何做到这一点取决于你如何展示这些。如果您真的试图同时在屏幕上显示所有150个,那么您的图像太大,占用了太多内存。您需要在网格中显示缩略图版本,并在全视图中显示全尺寸版本(假设您有全视图)

如果您只想显示一个部分,则只加载该部分,如果它们位于可滚动列表中,则在任意方向上加一个缓冲区。您可以知道自己在列表中的位置,因为可滚动列表触发onScroll事件,ArrayAdapter的getView方法将告诉您它正在加载的视图的位置


如果没有答案,请编辑您的问题,使其包含一个屏幕截图或您试图完成的UI模拟

我的问题有什么没人愿意回答的问题吗谢谢你,凯文。你说得对。我不需要同时加载图像。我可以并且我想在用户向下滚动时加载它们。我同时加载它们,因为我无法在用户滚动时加载它们。事实上,我做这件事很软弱。正如您所知,所有GridView都不在物理屏幕中,用户必须向下滚动才能看到它们。我希望当用户看到gridviewi-i时,从一个图像加载到十二个图像。谢谢你的帮助。
    final GridviewAdapter mAdapter;    
    final GridView  gridView0 = (GridView)findViewById(R.id.gridView1);


            final ArrayList<String> listCountry;
            final ArrayList<Integer> listFlag;

              listCountry = new ArrayList<String>();
              listFlag = new ArrayList<Integer>();



          listCountry.add("text1");
          listCountry.add("text2");
          listCountry.add("text3");
          listCountry.add("text4");
          listCountry.add("text5");
          listCountry.add("text6");
          listCountry.add("text7");
          listCountry.add("text8");
          listCountry.add("text9");
        //
          listFlag.add(R.drawable.w1);
          listFlag.add(R.drawable.w12);
          listFlag.add(R.drawable.w15);
          listFlag.add(R.drawable.w26);
          listFlag.add(R.drawable.w28);
          listFlag.add(R.drawable.w33);
          listFlag.add(R.drawable.w44);
          listFlag.add(R.drawable.w46);
          listFlag.add(R.drawable.w50);

mAdapter = new GridviewAdapter(FirstPageActivity.this,listCountry, listFlag);
                                                                                                gridView0.setAdapter(mAdapter);`